len, print).global. Для изменения переменной во внешней области видимости используется nonlocal (в Python 3).  Без них, присваивание внутри функции создает локальную переменную.  Python ищет переменные в областях видимости в порядке LEGB (Local, Enclosing, Global, Built-in).
В Python существуют разные области видимости, которые определяют, где переменная может быть доступна и использована. Основные области видимости:
print, len, True).Python использует правило LEGB (Local, Enclosing, Global, Built-in) для поиска переменной. Когда вы используете имя переменной, Python сначала ищет его в локальной области видимости, затем во внешней, затем в глобальной и, наконец, во встроенной.
Как работать с переменными в разных областях видимости:
Локальные переменные используются для хранения данных, относящихся только к конкретной функции. Они "живут" только во время выполнения функции.
def my_function():
  x = 10  # Локальная переменная
  print(x)
my_function()  # Выводит 10
# print(x)  # Вызовет ошибку NameError, т.к. x не существует вне функции
Глобальные переменные можно использовать для хранения данных, которые должны быть доступны из разных частей программы. Однако, важно помнить, что изменение глобальных переменных внутри функции требует явного объявления с использованием ключевого слова global.
x = 5  # Глобальная переменная
def my_function():
  global x  # Указываем, что мы хотим изменить глобальную переменную x
  x = 20
  print("Внутри функции:", x)
my_function()  # Выводит "Внутри функции: 20"
print("Вне функции:", x)  # Выводит "Вне функции: 20"
Без использования global внутри функции, Python создаст новую локальную переменную с тем же именем, не изменяя глобальную переменную.
Ключевое слово nonlocal используется для доступа и изменения переменных во внешней (enclosing) области видимости. Это полезно при работе с вложенными функциями.
def outer_function():
  x = 10
  def inner_function():
    nonlocal x  # Указываем, что мы хотим изменить переменную x во внешней функции
    x = 30
    print("Внутри внутренней функции:", x)
  inner_function()
  print("Внутри внешней функции:", x)
outer_function()
# Вывод:
# Внутри внутренней функции: 30
# Внутри внешней функции: 30
Важно: Злоупотребление глобальными переменными может привести к сложному и трудно отлаживаемому коду. Старайтесь использовать их только когда это действительно необходимо.  nonlocal также следует использовать осторожно, чтобы не усложнять структуру кода.