Python 3中t2_out未定义消失原因:嵌套函数作用域外变量渲染问题
为什么Python 3中
t2_out会提示未定义? 这个问题是Python的变量作用域规则直接导致的,你给出的代码如下:
def returnTempOppositeFlow2(self, t1_in, t2_out, t2_in, m2 ): def tosolve(z): t2_out = max(t2_out,t2_in+1.0)
根本原因
Python解释器扫描函数定义时,只要检测到函数内部存在对某个变量的赋值操作,就会默认将该变量标记为当前函数的局部变量,不会再向上层作用域查找该变量。
你在内层函数tosolve中写了t2_out = ...的赋值逻辑,因此解释器判定t2_out是tosolve的局部变量;但执行max(t2_out, t2_in+1.0)时,该局部变量还没有完成赋值,因此直接抛出未定义错误。
解决方法
- 如果你需要在内层函数中修改外层函数的
t2_out变量,在内层函数开头添加nonlocal t2_out声明,明确告知解释器该变量来自外层作用域:
def returnTempOppositeFlow2(self, t1_in, t2_out, t2_in, m2 ): def tosolve(z): nonlocal t2_out t2_out = max(t2_out,t2_in+1.0)
- 如果你不需要修改外层的
t2_out,仅需要读取它的值计算新结果,给内层的变量更换一个不重名的名称即可避免作用域冲突。
内容的提问来源于stack exchange,提问作者Efried
相关产品推荐
相关产品推荐

