Python Glossary English

все Python 3Функциипонятие

Локальные и глобальные переменные

область видимости

LEGB-правило: Local → Enclosing → Global → Built-in. Локальная переменная существует только внутри функции.

Синтаксис

x = 10  # глобальная
def f():
    x = 5  # локальная

Главная грабля: любое присваивание имени внутри функции делает его локальным на всё тело — поэтому прочитать глобальную x, а ниже написать x = ..., нельзя, будет UnboundLocalError уже на чтении. Читать глобальные можно без объявления, но чтобы присвоить именно глобальной, а не создать новую локальную, нужен global; для переменной из объемлющей функции — nonlocal.

Примеры

x = 'global'
def f():
    x = 'local'
    print(x)  # → local
f()
print(x)  # → global
count = 0
def inc():
    global count
    count += 1
inc()
print(count)  # → 1
def outer():
    n = 10
    def inner():
        nonlocal n
        n += 1
    inner()
    return n
print(outer())  # → 11
# Ловушка: чтение до присваивания
x2 = 5
def bad():
    print(x2)  # UnboundLocalError!
    x2 = 10
# Встроенные имена
def f2():
    print(len([1,2,3]))  # → 3 (built-in)
f2()
# Enclosing
def outer2():
    msg = 'hi'
    def inner2():
        print(msg)  # → hi (enclosing)
    inner2()
outer2()

См. также

Открыть в полном глоссарииdocs.python.orgСообщить о неточности