Безопасно ли изменять вывод глобальных переменных()?
Документация для функции locals() специально предупреждает не изменять свой вывод, поскольку интерпретаторы могут не отражать изменения в локальной области. Я предполагаю, что это означает, что спецификация Python не требует этого, даже если она работает в CPython.
Я хотел бы знать, так ли это для globals(). Там нет предупреждений в документации, но мне странно, что это будет отличаться, поскольку каждая функция, по-видимому, выполняет одно и то же действие в другой области.
Если это безопасно, изменение результата globals() будет улучшать простоту и совместимость проекта, над которым я работаю.
Ответы
Ответ 1
Модификация locals()
не работает надежно, даже в CPython. Случается, что он работает в модулях и классах, но не работает внутри функции (любые модификации "не будут приняты", поскольку locals()
предоставляет копию локального пространства имен в этом случае, а не ссылку на реальную вещь)
Однако globals()
отличается, так как это всегда относится к пространству имен модулей, а пространства имен модулей должны вести себя как обычные словари. Так что да, отсутствие предупреждения на globals()
не является надзором, это действительно разрешено.