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 и выше вы можете использовать нелокальное ключевое слово.

Другие вопросы по тегам