Python Glossary English

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Сообщить о неточности