Python scope
本问题已经有最佳答案,请猛点这里访问。
我想弄清楚:
1 2 3 4 5 6 7 8 | 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 |
谢谢!
在函数中,默认情况下,分配给的变量被视为局部变量。要分配给全局变量,请使用
1 2 3 | def g(n): global c c = c + n |
这是Python的一个奇怪的地方,它从来没有真正适合我。
全球国家是需要避免的,特别是需要改变它。考虑如果
1 2 3 4 5 6 7 8 9 10 11 | 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) |
输出:
1 2 | 2 3 |
格雷格职位勘误表:
在引用它们之前应该没有。看一看:
它会爆炸,即使在引用后指定了X。在python中,变量可以是本地变量或引用外部范围,并且不能在一个函数中更改。
除了greg所说的,在python3.0中,还有一个非本地语句来声明"这里有一些在封闭范围中定义的名称"。与全局名称不同,这些名称必须已经在当前范围之外定义。很容易找到名称和变量。现在你不能确定"全球某物"到底是在哪里定义的。