Что произойдёт, если в функции использовать `global`, но не инициализировать переменную до этого в глобальной области?

Если в функции использовать global для переменной, которая не была инициализирована в глобальной области видимости до вызова функции, то при первом присваивании значения этой переменной внутри функции, она будет создана как глобальная переменная. То есть, global позволяет функции работать с переменной, существующей вне ее области видимости, даже если эта переменная еще не определена в глобальной области на момент определения функции.

Если в функции использовать ключевое слово global для переменной, которая до этого не была инициализирована в глобальной области видимости, произойдет следующее:

  • Если функция только читает значение переменной (например, print(x)) до присвоения, возникнет исключение NameError. Python сначала попытается найти переменную в локальной области видимости функции. Если её там нет, а используется global, то Python поймёт, что переменная должна быть глобальной. Но поскольку переменная не определена в глобальной области видимости *до* ее использования в функции, будет выброшено исключение.
  • Если функция сразу присваивает значение переменной (например, x = 10) после объявления global x, то переменная будет создана в глобальной области видимости. То есть, Python создаст новую глобальную переменную с указанным именем. После выполнения функции, глобальная переменная будет доступна для использования вне функции.

Пример 1 (Ошибка NameError):

def my_func():
    global x
    print(x)  # Ошибка NameError: name 'x' is not defined
    x = 10

my_func()
  

Пример 2 (Создание глобальной переменной):

def my_func():
    global x
    x = 10
    print(x)  # Вывод: 10

my_func()
print(x)  # Вывод: 10
  

Важно помнить: Использование global стоит избегать, когда это возможно, поскольку это делает код более сложным для понимания и отладки. Лучше передавать данные в функцию и возвращать их из функции, чем использовать глобальные переменные.

0