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

Безопасно ли изменять вывод глобальных переменных()?

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

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

Если это безопасно, изменение результата globals() будет улучшать простоту и совместимость проекта, над которым я работаю.

4b9b3361

Ответ 1

Модификация locals() не работает надежно, даже в CPython. Случается, что он работает в модулях и классах, но не работает внутри функции (любые модификации "не будут приняты", поскольку locals() предоставляет копию локального пространства имен в этом случае, а не ссылку на реальную вещь)

Однако globals() отличается, так как это всегда относится к пространству имен модулей, а пространства имен модулей должны вести себя как обычные словари. Так что да, отсутствие предупреждения на globals() не является надзором, это действительно разрешено.