Я пытаюсь выяснить это: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
Спасибо!
Внутри функции переменные, которые назначены, по умолчанию считаются локальными переменными. Для того, чтобы присвоить глобальные переменные, используйте global
заявление:
def g(n):
global c
c = c + n
Это одна из самых необычных областей Python, которые действительно никогда не сидел хорошо со мной.
Глобальное состояние - это то, чего следует избегать, особенно необходимо его мутировать. Рассмотрим, если 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