Me preguntaba si alguien tenía alguna idea sobre el uso de Python global frente a la referencia del módulo en sí. Mientras que en el pasado solía global cuando sea necesario, he encontrado que es algo más clara para hacer el segundo método (y recientemente han tendido a favorecer esta sintaxis):Uso de Python de global versus especificación del módulo
import sys
mod = sys.modules[__name__]
counter = 0
def incrementGlobal():
global counter
counter += 1
def incrementMod():
mod.counter += 1
Obviamente ambos funcionan bien, pero si alguien tiene opiniones fuertes (lo que es más pitónico, rendimiento, etc.), me encantaría escucharlas.
Por cierto que terminan usando cualquiera de éstos en situaciones en que el módulo de forma natural encapsula todos los métodos y atributos de lo que sería una sola clase, y en lugar de incrementmodule.IncrementClass.counter referencia que sólo puede utilizar incrementmodule.counter.
¿Cómo está el segundo más claro? – delnan
Supongo que no es mucho más claro, pero lo prefiero ya que es obvio que una variable de nivel de módulo está siendo modificada, en lugar de una local (evita que tenga que volver atrás para ver si la variable está en la declaración global en la parte superior) – gnr
Si el 'global' y la tarea están tan lejos, tienes problemas de claridad peor que eso;) – delnan