python - inside - ¿Es seguro modificar la salida de globals()?
scope python 3 (1)
La modificación de locals()
no funciona de manera confiable, incluso en CPython. Resulta que funciona en módulos y ámbitos de clase, pero falla dentro de una función (cualquier modificación "no se realizará", ya que locals()
proporciona una copia del espacio de nombres local en ese caso, en lugar de una referencia a lo real)
Sin embargo, globals()
es diferente, ya que siempre se refiere al espacio de nombres del módulo, y se requiere que los espacios de nombres de los módulos se comporten como diccionarios ordinarios. Entonces, sí, la falta de una advertencia en globals()
no es un descuido, realmente está permitido.
La documentación de la función locals () advierte específicamente de no modificar su salida, ya que los intérpretes pueden no reflejar cambios en el ámbito local. Supongo que eso significa que la especificación de Python no lo requiere, a pesar de que funciona en CPython.
Me gustaría saber si esto es lo mismo para globals (). No hay ninguna advertencia en la documentación , pero me parece extraño que esto difiera ya que cada función aparentemente realiza la misma acción en un ámbito diferente.
Si es seguro, modificar la salida de globals () mejoraría la simplicidad y la compatibilidad de un proyecto en el que estoy trabajando.