我想弄清楚這一點: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
謝謝!
我想弄清楚這一點: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