Cuando se asigna una variable (x = ...
), que está creando una variable en el ámbito actual (por ejemplo, local a la función actual). Si sucede sombrear una variable de un ámbito externo (por ejemplo, global), es una lástima: a Python no le importa (y eso es bueno). Entonces usted no puede hacer esto:
x = 0
def f():
x = 1
f()
print x #=>0
y espera 1
. En cambio, necesita no declara que va a utilizar el global x
:
x = 0
def f():
global x
x = 1
f()
print x #=>1
Pero tenga en cuenta que la asignación de una variable es muy diferente de las llamadas a métodos. Siempre puede llamar a los métodos sobre cualquier cosa dentro del alcance, p. Ej. en variables que provienen de un ámbito externo (por ejemplo, el global) porque nada local las sombrea.
también muy importante: la asignación miembro (x.name = ...
), misiones artículo (collection[key] = ...
), misiones rebanada (sliceable[start:end] = ...
) y además probablemente más están llamadas a métodos, así! Y, por lo tanto, no necesita global
para cambiar los miembros de un global o llamarlo métodos (incluso cuando mutan el objeto).
Por supuesto que sabe que las variables globales son eeeevil? Cuando sea posible, no escriba una función que dependa de algo más que los argumentos. Y nunca, a menos que en circunstancias muy excepcionales, modifique algo global desde más de un punto. Casi nunca es necesario y es propenso a agregar grandes dolores de cabeza más adelante. En conclusión, no vale la pena. – delnan