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