Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/302.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作用域:";UnboundLocalError:局部变量';c';作业前参考“;_Python_Scope - Fatal编程技术网

Python作用域:";UnboundLocalError:局部变量';c';作业前参考“;

Python作用域:";UnboundLocalError:局部变量';c';作业前参考“;,python,scope,Python,Scope,我正试图弄明白这一点: c = 1 def f(n): print c + n def g(n): c = c + n f(1) # => 2 g(1) # => UnboundLocalError: local variable 'c' referenced before assignment 谢谢 在函数中,默认情况下,分配给的变量被视为局部变量。要分配给全局变量,请使用以下语句: def g(n): global c c = c + n

我正试图弄明白这一点:

c = 1
def f(n):
    print c + n 
def g(n):
    c = c + n

f(1) # => 2
g(1) # => UnboundLocalError: local variable 'c' referenced before assignment

谢谢

在函数中,默认情况下,分配给的变量被视为局部变量。要分配给全局变量,请使用以下语句:

def g(n):
    global c
    c = c + n

这是Python的一个奇怪的领域,我从来都不喜欢它。

全局状态是需要避免的,尤其是需要对其进行变异。考虑< <代码>()>代码>应简单地采用两个参数,或者如果<代码> f>(<代码> >和<代码>())/代码>需要是一个公共类的方法,使用代码> c>代码>实例属性

class A:
    c = 1
    def f(self, n):
        print self.c + n
    def g(self, n):
        self.c += n

a = A()
a.f(1)
a.g(1)
a.f(1)
产出:

2
3

除了Greg所说的,在Python3.0中,将有一个非局部语句声明“这里有一些在封闭范围中定义的名称”。与全局名称不同,这些名称必须已经在当前范围之外定义。追踪名称和变量将很容易。如今,你无法确定“全局某物”的确切定义。

勘误表:

在引用它们之前,不应存在任何错误。看一看:

x=1
def explode():
打印x#会在此处引发UnboundLocalError
x=2

即使x在被引用后被指定,它也会爆炸。
在Python中,变量可以是局部变量或引用外部作用域,并且不能在一个函数中更改。

这与PHP类似,还需要使用
global
。 x = 1 def explode(): print x # raises UnboundLocalError here x = 2