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

Частые ошибки

  1. Попытка изменения объектов, которые нельзя модифицировать:

    globals()["__name__"] = "новое_имя"  # Ошибка: изменение зарезервированных переменных запрещено
    

    Как исправить: Избегайте попыток модифицировать ключевые глобальные переменные Python, такие как __name__, __doc__ и т. д.

  2. Ошибка при обращении к несуществующему ключу:

    print(globals()["неизвестный_ключ"])  # Ошибка: KeyError
    

    Как исправить: Используйте метод get для безопасного доступа:

    value = globals().get("неизвестный_ключ", "По умолчанию")
    print(value)  # Вывод: По умолчанию
    
  3. Непреднамеренное создание или изменение глобальных переменных:

    globals()["x"] = 100
    print(x)  # Вывод: 100
    

    Как исправить: Будьте осторожны при использовании globals(), чтобы не изменять переменные случайно.

Часто задаваемые вопросы

  1. Что содержится в словаре, возвращаемом globals()? Все глобальные переменные, функции, классы и объекты текущего модуля. Также включены зарезервированные переменные Python, такие как __name__, __doc__, __file__ и другие.

  2. Можно ли использовать globals() для динамического создания переменных? Да, это возможно, но следует использовать с осторожностью, чтобы избежать путаницы:

    globals()["dynamic_var"] = "Значение"
    print(dynamic_var)  # Вывод: Значение
    
  3. Можно ли использовать globals() внутри функций? Да, однако результат будет относиться к глобальному пространству, а не к локальным переменным функции.

    def example():
        globals()["x"] = 50
    
    example()
    print(x)  # Вывод: 50