Global, Local, and Nonlocal Variables

Глобальна змінна — це змінна, оголошена поза функцією або в глобальній області видимості. Це означає, що до глобальної змінної можна отримати доступ як всередині, так і ззовні функції.

Ви можете отримати доступ до глобальних змінних всередині функцій (ТІЛЬКИ ДЛЯ ЧИТАННЯ), але якщо хочете їх змінити — оголосіть 'global':

x = 5
y = 10

def change_x():
    global x
    x += 10
    return x

def change_x_y():
    global x, y
    x += 20
    y += 20
    return x, y

print(x, y)     # 5 10
print(change_x())   # 15
print(x, y)     # 15 10
print(*change_x_y())    # 35 30
print(x, y)     # 35 30
Зверніть увагу: у прикладі print(*change_x_y()) ми використали розпакування (*). Це дозволило вивести змінні не у вигляді кортежу — 35 30 замість (35, 30).

Нелокальні змінні стосуються всіх тих змінних, які оголошені у вкладених функціях. Змінні можуть бути ні в локальній, ні в глобальній області видимості. Використовуйте ключове слово nonlocal для створення нелокальної змінної. Порівняємо функції без та з використанням цього ключового слова:

# Без ключового слова `nonlocal`
def print_x_y():
    x = 5

    def print_x():
        x = 10
        print(x)
    print(x)
    print_x()
    print(x)

print_x_y()         # 5 10 5

# З ключовим словом `nonlocal`
def print_x_y():
    x = 5

    def print_x():
        nonlocal x
        x = 10
        print(x)
    print(x)
    print_x()
    print(x)

print_x_y()         # 5 10 10