globals
Функция globals() возвращает словарь текущего глобального пространства имён. Это пространство включает все глобальные переменные, функции и другие объекты, доступные в модуле.
Синтаксис
globals()
Аргументы
Функция globals не принимает аргументов.
Возвращаемое значение
Словарь, представляющий глобальное пространство имён. Ключами являются имена переменных и функций, а значениями — соответствующие объекты.
Примеры использования
# Просмотр текущих глобальных переменных
x = 42
y = "Привет, мир!"
print(globals())
# Примерный вывод: {'__name__': '__main__', '__doc__': None, 'x': 42, 'y': 'Привет, мир!'}
# Использование globals для динамического создания переменной
var_name = "new_var"
globals()[var_name] = 100
print(new_var) # Вывод: 100
# Получение ссылки на функцию через globals
def greet():
return "Привет!"
func_name = "greet"
print(globals()[func_name]()) # Вывод: Привет!
Эквивалентный код
def pyplanet_globals():
# Возвращает словарь глобальных переменных
import inspect
return inspect.currentframe().f_globals
Частые ошибки
Попытка изменения объектов, которые нельзя модифицировать:
globals()["__name__"] = "новое_имя" # Ошибка: изменение зарезервированных переменных запрещено
Как исправить: Избегайте попыток модифицировать ключевые глобальные переменные Python, такие как __name__, __doc__ и т. д.
Ошибка при обращении к несуществующему ключу:
print(globals()["неизвестный_ключ"]) # Ошибка: KeyError
Как исправить: Используйте метод get для безопасного доступа:
value = globals().get("неизвестный_ключ", "По умолчанию") print(value) # Вывод: По умолчанию
Непреднамеренное создание или изменение глобальных переменных:
globals()["x"] = 100 print(x) # Вывод: 100
Как исправить: Будьте осторожны при использовании globals(), чтобы не изменять переменные случайно.
Часто задаваемые вопросы
Что содержится в словаре, возвращаемом globals()? Все глобальные переменные, функции, классы и объекты текущего модуля. Также включены зарезервированные переменные Python, такие как __name__, __doc__, __file__ и другие.
Можно ли использовать globals() для динамического создания переменных? Да, это возможно, но следует использовать с осторожностью, чтобы избежать путаницы:
globals()["dynamic_var"] = "Значение" print(dynamic_var) # Вывод: Значение
Можно ли использовать globals() внутри функций? Да, однако результат будет относиться к глобальному пространству, а не к локальным переменным функции.
def example(): globals()["x"] = 50 example() print(x) # Вывод: 50