Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 为什么会出现未绑定的本地错误?_Python - Fatal编程技术网

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中的所有内容都是对象);由于函数只有一个副本,因此它本质上是全局的。