Python 3.0+Функциипонятие
global / nonlocal
область видимости
global объявляет переменную из глобального пространства. nonlocal — из охватывающей функции (не глобальной).
Синтаксис
global x
nonlocal y
Объявление нужно только для присваивания: читать глобальную переменную или менять на месте изменяемый объект (list.append) можно и без global. nonlocal требует, чтобы переменная уже существовала в охватывающей функции, — создать новую он не может и до глобальных имён не дотягивается.
Примеры
counter = 0
def increment():
global counter
counter += 1
increment()
print(counter) # → 1
def make_counter():
count = 0
def inc():
nonlocal count
count += 1
return count
return inc
c = make_counter()
print(c(), c(), c()) # → 1 2 3
total = 0
def add(x):
global total
total += x
add(5); add(3)
print(total) # → 8
def outer():
x = 0
def middle():
nonlocal x
x = 10
def inner():
nonlocal x
x += 1
inner()
middle()
return x
print(outer()) # → 11
# global можно объявить несколько переменных
a = b = 0
def reset():
global a, b
a = b = 1
reset()
print(a, b) # → 1 1
def acc():
s = 0
def add(n):
nonlocal s
s += n
return s
return add
f = acc()
print(f(3), f(4)) # → 3 7
См. также
Открыть в полном глоссарииdocs.python.orgСообщить о неточности