Una alternativa a lo global en Python.

Actualmente tengo un código como este:

cache = 1 def foo(): global cache # many # lines # of code cache = 2 

Sin embargo, esto puede llevar a errores difíciles de encontrar en el futuro, ya que el lector puede no notar que global cache aparece en algún lugar arriba del cache = 2 . Alternativamente, un colaborador puede agregar por error la def bar(): cache = 2 y olvidarse de agregar el global cache .

¿Cómo puedo evitar esta trampa?

 class Cache: myvar = 1 def foo(): Cache.myvar = 2 

De esta manera, Cache.myvar es prácticamente un “global”. Es posible leerlo / escribirlo desde cualquier lugar.

Prefiero esto en lugar de la alternativa del diccionario, ya que permite completar automáticamente los nombres de las variables.

 cache = 1 def foo(): return 2 cache = foo() 

o

 d = {'cache': 1} def foo(x): x['cache'] = 2 foo(d) 

“el lector puede pensar involuntariamente que la variable global se ha actualizado” no es un escollo. Debes esperar que la gente que lea tu código sepa cómo funciona Python. Si quieres dejarlo más claro, usa un comentario. Para eso están.

Usar una variable global no es una buena práctica de progtwigción. Pase la variable como un argumento: la función make devuelve algo y la usa en otra función. La función puede ser asignada a una variable, así es como funciona Python.