2012-02-20 14 views
19

¿Cuál es el uso correcto de las variables globales en Python 3 ?:correcto uso de variables globales en Python 3

1) Afirmar global VAR_NAME una vez en la secuencia de comandos del núcleo (no dentro de una función) y luego simplemente se refiere a la variable VAR_NAME como en cualquier otro lugar

2) Afirmar global VAR_NAME una vez dentro de cada función que utiliza la variable global y luego simplemente se refiere a la variable como VAR_NAME para el resto de la función y dentro de la secuencia de comandos propio núcleo

+1

Para un segundo punto de Rik, una pregunta más importante es ¿qué te lleva a pensar que lo necesitas? El uso de la palabra clave 'global' entre los principiantes casi siempre es un signo de tratar de programar utilizando la mentalidad de otro idioma, y ​​si estás leyendo algún tutorial que lo alienta, debes obtener uno mejor. – DSM

+0

Solo el n. ° 2 es relevante. No puede declarar globalmente un global. ** Debes ** cambiar el significado del nombre en cada espacio de nombre local que se refiera a lo global. Cuando probaste el enfoque n. ° 1, ¿funcionó? Si es así, ¿puedes probarlo con un ejemplo? Y. Evita los globales –

+2

Además de lo que otros han dicho acerca de no usar global, puede averiguar fácilmente cuál funciona al probar ambos. –

Respuesta

33

En el primer Si la palabra clave global no tiene sentido, eso no es correcto. La definición de una variable en el nivel del módulo la convierte en una variable global, no es necesario que tenga una palabra clave global.

El segundo ejemplo es el uso correcto.

Sin embargo, el uso más común para las variables globales es sin utilizar la palabra clave global en cualquier lugar. La palabra clave global es necesaria solo si desea reasignar las variables globales en la función/método.

+3

¿Pueden los downvoters explicar qué pasa con esta respuesta? – LarsH

25

Debe utilizar la palabra clave global en una función si utiliza la variable global de una manera que de otro modo se interpretaría como una asignación a una variable local. Sin la palabra clave global, creará una variable local que oculta el global en el alcance de la función.

Éstos son algunos ejemplos:

global_var = 1 

def example1(): 
    # global keyword is not needed, local_var will be set to 1. 
    local_var = global_var 

def example2(): 
    # global keyword is needed, if you want to set global_var, 
    # otherwise you will create a local variable. 
    global_var = 2 

def example3(): 
    # Without using the global keyword, this is an error. 
    # It's an attempt to reference a local variable that has not been declared. 
    global_var += 1 
2

"de una manera que de otra manera sería interpretado como una asignación a una variable local" --- sí, pero aquí es un detalle sutil:

------------------- error: variable local 'c' a la que se hace referencia antes de la asignación

def work(): 
    c += 3 

c = 0 

work() 
print(c) 

-------------- ----- error: variable local 'c' referenciada antes de la asignación

c = 0 

def work(): 
    c += 3 

work() 
print(c) 

grabados ------------------- [3]

def work(): 
    c.append(3) 

c = [] 

work() 
print(c) 

------------- ------ impresiones [3]

c = [] 

def work(): 
    c.append(3) 

work() 
print(c)