Python的范围
问题描述:
我想弄清楚这一点:Python的范围
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
谢谢!
答
答
全局状态是可以避免的,特别是需要改变它。试想,如果g()
应该简单地采取两个参数,或者如果f()
和g()
需要与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
答
比格雷格说其他,在Python 3.0,将会有非局部语句声明“这里是一些在封闭范围内定义的名字”。与全球不同,这些名称必须已经在当前范围之外定义。很容易追踪名称和变量。如今,您无法确定“globals something”的确切位置。
答
勘误Greg's post:
应该没有被引用之前。看一看:
x = 1
def explode():
print x # raises UnboundLocalError here
x = 2
它爆炸,即使x被引用后被分配。 在Python中,变量可以是本地的或引用外部作用域,并且它不能在一个函数中更改。
这与PHP类似,它也需要使用`global`。 – 2014-07-06 08:03:55