Python, как я могу изменить значение переменной в родительской области?
Например: оператор assginment объявит новую локальную переменную.
foo = 'global'
def func1():
foo = 'func1'
def func2():
foo = 'local variable in func2'
использовать глобальное объявление будет использовать foo в глобальном:
def func2():
global foo
foo = 'global changed in func2' #changed the foo value in global scope
Как я могу изменить переменную Foo в области func1?
Спасибо за любую помощь.
Редактировать:
Спасибо, Брэндон Крейг Роудс, я наконец понял ваш смысл.
если вложенных областей больше 3, я могу сохранить переменную в списке.
foo = ['global', 'function1', 'function2']
def func1():
foo[1] = 'func1'
def func2():
foo[2] = 'func2'
foo[1] = 'func1 modified in func2'
Я просто использую глобальную переменную на самом деле.
Итак, если есть две вложенные функции, мы можем использовать
nonlocal foo
а также
global foo
если есть более трех вложенных функций,
и каждая функция использует переменные в области действия других функций,
почему мы не объявляем глобальную переменную списка?
Спасибо за твою помощь!!!
2 ответа
В Python 3, я считаю, вы можете использовать nonlocal
ключевое слово, чтобы получить разрешение на изменение переменной во вложенной неглобальной области. В Python 2 вы не можете переназначить foo
в закрытом объеме; вместо этого установите foo
равный изменчивому объекту как список []
а затем вставьте значение, которое вы хотите сохранить в списке:
def func1():
foo = [None]
def func2():
foo[0] = 'Test'
В Python 3.0 и выше вы можете использовать нелокальное ключевое слово.