Как работает `global` в функции?

Ключевое слово global позволяет функции модифицировать переменные, объявленные за пределами ее локальной области видимости, то есть в глобальной области видимости. Без global функция может только читать глобальную переменную, но не изменять ее. Использование global внутри функции указывает интерпретатору, что данная переменная относится к глобальной области.


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

Основные моменты:

  • Доступ к глобальной переменной: global позволяет функции не только читать значение глобальной переменной, но и изменять его.
  • Изменение глобальной переменной: Если вы присваиваете значение переменной внутри функции и объявили её как global, то изменения повлияют на глобальную переменную, а не создадут локальную.
  • Объявление обязательно: Если вы хотите изменить значение глобальной переменной, её нужно объявить как global внутри функции перед использованием. Простое чтение глобальной переменной не требует объявления global.
  • Использование вне функций: Ключевое слово global используется только внутри функций. Вне функций переменные по умолчанию имеют глобальную область видимости.

Пример:


    global_var = 10

    def my_function():
      global global_var
      global_var = 20  # Изменяет глобальную переменную

    print(global_var)  # Выводит 10
    my_function()
    print(global_var)  # Выводит 20
  

Без использования global в примере выше:


    global_var = 10

    def my_function():
      global_var = 20  # Создает локальную переменную с тем же именем

    print(global_var)  # Выводит 10
    my_function()
    print(global_var)  # Выводит 10 (глобальная переменная не изменилась)
  

Когда использовать global:

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

  • Глобальные константы: Для определения глобальных констант, которые будут доступны во всех функциях (хотя изменение таких "констант" все равно не рекомендуется). Обычно такие "константы" не изменяются.
  • Глобальное состояние: В ситуациях, когда требуется хранить и изменять глобальное состояние программы, например, в многопоточных приложениях (с соответствующей синхронизацией). В этом случае необходима аккуратность и понимание потенциальных проблем с конкурентным доступом.
  • Упрощение кода: В редких случаях, когда передача переменных между функциями делает код значительно сложнее, global может упростить код, но это должно быть взвешенным решением.

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

0