Функция Python globals() не имеет аргументов. Она возвращает словарь текущего модуля (внутри функции или метода это модуль, в котором он определен, а не модуль, из которого он вызывается).

Что такое globals() в Python?
globals() в Python — это встроенная функция, которая возвращает словарь текущей глобальной таблицы символов, хранящую глобальные переменные. Таблица символов — это структура данных, содержащая всю необходимую информацию о программе. К ним относятся имена переменных, методы, классы и т. д.
Python хранит информацию о программе в таблицах символов. Существует два типа таблиц символов.
- Локальная таблица символов: в ней хранится информация, относящаяся к локальной области действия программы. Мы можем получить эти данные, используя функцию locals(). Локальная область может быть внутри функции, внутри класса и т. д.
- Глобальная таблица символов: в ней хранится информация, относящаяся к глобальной области действия программы. Мы можем получить эти данные с помощью функции globals(). Глобальная область видимости содержит все функции, переменные, которые не связаны ни с каким классом или функцией.
Давайте посмотрим, что возвращает функция globals().
|
1 2 3 |
# app.py print(globals()) |
См. следующий вывод.
|
1 2 3 4 5 6 7 |
➜ pyt python3 app.py {'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x10340f2b0>, '__spec__': None, '__annotations__': {}, '__builtins__': <module 'builtins'(built-in)>, '__file__': 'app.py', '__cached__': None} ➜ pyt |
Теперь давайте определим одну переменную с именем name и посмотрим результат.
|
1 2 3 4 |
# app.py name = "Millie Bobby Brown" print(globals()) |
Вывод:
|
1 2 3 4 5 6 7 8 |
➜ pyt python3 app.py {'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x10340f2e8>, '__spec__': None, '__annotations__': {}, '__builtins__': <module 'builtins'(built-in)>, '__file__': 'app.py', '__cached__': None, 'name': 'Millie Bobby Brown'} ➜ pyt |
Вы можете видеть, что в последней строке вывода появилась определенная переменная.
Одной из особенностей функции globals() является то, что мы можем изменять переменные в глобальном словаре. Поскольку это словарь, мы также можем получить значение конкретного ключа.
Давайте получим доступ к переменной name.
|
1 2 3 4 |
# app.py name = "Millie Bobby Brown" print(globals()['name']) |
Вывод:
|
1 2 3 |
➜ pyt python3 app.py Millie Bobby Brown ➜ pyt |
Изменение глобальной переменной с помощью global()
См. следующий код.
|
1 2 3 4 5 6 |
# app.py name = "Millie Bobby Brown" globals()['name'] = "Joe Keerey" print(globals()['name']) print(globals()) |
Поскольку глобальная таблица символов также хранит все глобальные переменные, то есть в данном случае имя, значение имени можно изменить с помощью функции globals().
Доступ к возвращаемому словарю осуществляется с использованием ключа имени переменной и изменяется на Joe Keery.
Это снова отражается в глобальной таблице символов.
|
1 2 3 4 5 6 7 8 |
➜ pyt python3 app.py Joe Keerey {'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x10340f2e8>, '__spec__': None, '__annotations__': {}, '__builtins__': <module 'builtins'(built-in)>, '__file__': 'app.py', '__cached__': None, 'name': 'Joe Keerey'} ➜ pyt |
Давайте посмотрим, содержит ли функция globals() локальные переменные области видимости или нет. Для этого определим функцию и некоторые переменные внутри нее.
|
1 2 3 4 5 6 7 8 9 10 11 |
# app.py def food(): local = '' global u u = 'Eggos' food() print(globals()) print(globals()['u']) |
Здесь следует отметить, что переменная ‘u’ является частью глобального словаря, потому что ее область действия является глобальной. Принимая во внимание, что локальная переменная не является частью глобального словаря из-за того, что имеет локальную область действия.
Вывод:
|
1 2 3 4 5 6 7 8 9 10 |
➜ pyt python3 app.py {'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x10340f2b0>, '__spec__': None, '__annotations__': {}, '__builtins__': <module 'builtins'(built-in)>, '__file__': 'app.py', '__cached__': None, 'food': <function food at 0x101fbae18>, 'u': 'Eggos'} Eggos ➜ pyt |
Итак, функция Python globals() — это утилита, в основном используемая для отладки кода. Мы можем использовать его для определения переменных глобальной области видимости и функций, доступных программе.
