Python 为什么会出现未绑定的本地错误?
因此,所讨论的函数非常长,因此我将对其进行总结Python 为什么会出现未绑定的本地错误?,python,Python,因此,所讨论的函数非常长,因此我将对其进行总结 def func1( X = None, Y = None ) : if X : dostuff if condition : Z += 1 if Y : print Y func1.Z = 0 def func2( A ) for loop that does stuff and calls func1 当我运行此命令时,它告诉我,行Z+=1有一个错误“UnboundLocalErro
def func1( X = None, Y = None ) :
if X :
dostuff
if condition :
Z += 1
if Y :
print Y
func1.Z = 0
def func2( A )
for loop that does stuff and calls func1
当我运行此命令时,它告诉我,行Z+=1有一个错误“UnboundLocalError:赋值前引用的局部变量“Z”
我已经阅读了所有未绑定的局部错误和作业前参考问题,但没有一个问题看起来类似,也没有一个解决方案有效
我应该将Z设为全局吗?因为在函数对象上设置属性不会创建本地名称。也在函数中的函数对象上引用它:
func1.Z += 1
或者让它成为一个全球性的。更好的做法是,避免此类诡计,只需将
Z
设置为本地参数或函数参数,并在函数末尾将Z
返回给调用方。因为在函数对象上设置属性不会创建本地名称。也在函数中的函数对象上引用它:
func1.Z += 1
或者让它成为一个全球性的。更好的方法是,避免这种恶作剧,只需将
Z
设置为本地或函数参数,并在函数末尾将Z
返回给调用者。Ah!我不知道。出于好奇,self.Z也能工作吗?我会在10分钟内选择这个作为答案。@AlexBaldwin:不<代码>自我不是功能<代码>自我在这里什么都不是。请看这里,进一步了解python名称和值。这是一个很好的描述。@AlexBaldwin:不;这里没有self
参数;这是函数对象上的一个属性(Python中的所有内容都是对象);因为这个函数只有一个副本,基本上是全局的。啊!我不知道。出于好奇,self.Z也能工作吗?我会在10分钟内选择这个作为答案。@AlexBaldwin:不<代码>自我不是功能<代码>自我在这里什么都不是。请看这里,进一步了解python名称和值。这是一个很好的描述。@AlexBaldwin:不;这里没有self
参数;这是函数对象上的一个属性(Python中的所有内容都是对象);由于函数只有一个副本,因此它本质上是全局的。