#python #function #variables #scope
#python #функция #переменные #область видимости
Вопрос:
Можно получить и распечатать внешнюю переменную функции a
def outer():
a = 1
def inner():
print a
Также можно получить массив внешних функций a
и добавить что-нибудь
def outer():
a = []
def inner():
a.append(1)
print a
Однако это вызвало некоторые проблемы, когда я попытался увеличить целое число:
def outer():
a = 1
def inner():
a = 1 #or a = a 1
print a
>> UnboundLocalError: local variable 'a' referenced before assignment
Почему это происходит и как я могу достичь своей цели (увеличить целое число)?
Комментарии:
1. Конечно, вы также можете передать a во внутреннюю из outer .
2. @sberry: это не позволит сделать то, что он пытается сделать, поскольку это создаст новую локальную переменную внутри
inner
, изменения в которой не будут отраженыouter
.3. Правильно, если только оно не возвращено, или OP в любом случае использует только
a
внутри inner .
Ответ №1:
В Python 3 вы можете сделать это с nonlocal
помощью ключевого слова. Сделайте nonlocal a
в начале inner
пометку a
как нелокальную.
В Python 2 это невозможно.
Ответ №2:
Обходной путь для Python 2:
def outer():
a = [1]
def inner():
a[0] = 1
print a[0]
Ответ №3:
Обычно более чистый способ сделать это был бы:
def outer():
a = 1
def inner(b):
b = 1
return b
a = inner(a)
Python позволяет многое, но нелокальные переменные обычно можно считать «грязными» (не вдаваясь в подробности здесь).