Подтвердить что ты не робот

Почему globals() - функция в Python?

Python предлагает функцию globals() для доступа к словарю всех глобальных переменных. Почему это функция, а не переменная? Следующие работы:

g = globals()
g["foo"] = "bar"
print foo # Works and outputs "bar"

В чем обоснование скрытия глобальных функций в функции? И лучше ли его вызывать только один раз и хранить ссылку где-нибудь, или я должен называть ее каждый раз, когда мне это нужно?

IMHO, это не дубликат Причина для globals() в Python?, потому что я не спрашиваю, почему существует globals(), а скорее, почему он должен быть функцией (вместо переменной __globals__).

4b9b3361

Ответ 1

Поскольку это может зависеть от реализации Python, сколько работы нужно для создания этого словаря.

В CPython globals хранятся только в другом сопоставлении, и вызов функции globals() возвращает ссылку на это сопоставление. Но другие реализации Python могут создавать отдельный словарь для объекта по мере необходимости по требованию.

Это отражает функцию locals(), которая в CPython должна создавать словарь по требованию, потому что локали обычно хранятся в массиве (локальные имена переводятся в доступ к массиву в байт-кодере CPython).

Итак, вы должны называть globals(), когда вам нужен доступ к сопоставлению глобальных имен. Хранение ссылки на это сопоставление работает в CPython, но не учитывайте другое в других реализациях.