Ответ 1
def f1():
x = { 'value': 5 }
def f2():
x['value'] += 1
Обходным путем является использование изменяемого объекта и обновление членов этого объекта. Иногда привязка имени сложна в Python.
Во втором случае ниже Python пытается найти локальную переменную. Когда он не находит его, почему он не может выглядеть во внешнем пространстве, как это делается для первого случая?
Это ищет x в локальной области, затем внешнюю область:
def f1():
x = 5
def f2():
print x
Это дает ошибку local variable 'x' referenced before assignment
:
def f1():
x = 5
def f2():
x+=1
Мне не разрешено изменять подпись функции f2(), поэтому я не могу передавать и возвращать значения x. Однако мне нужен способ изменения x. Есть ли способ явно указать Python искать имя переменной во внешней области (что-то похожее на ключевое слово global
)?
Версия Python: 2.7
def f1():
x = { 'value': 5 }
def f2():
x['value'] += 1
Обходным путем является использование изменяемого объекта и обновление членов этого объекта. Иногда привязка имени сложна в Python.
В Python 3.x это возможно:
def f1():
x = 5
def f2():
nonlocal x
x+=1
return f2
Проблема и ее решение для Python 2.x также приведены в этом сообщении. Кроме того, пожалуйста, прочитайте PEP 3104 для получения дополнительной информации по этому вопросу.