2011-01-14 10 views

Respuesta

8

Las variables de Python son nombres para valores. Realmente no "contienen" los valores.

for var in var_list: hace que 'var' se convierta en un nombre para cada elemento de la lista, sucesivamente. Dentro del ciclo, var = num no afecta la lista: en su lugar, hace que var deje de ser un nombre para el elemento de lista, y en su lugar comienza a ser un nombre para los nombres actualmente num.

Del mismo modo, cuando se crea la lista, si one, two y three no son ya nombres para los valores, entonces se puede no se utilicen así, porque usted está pidiendo para crear una lista de los valores que tienen los nombres (y luego haga que var_list sea un nombre para esa lista). Tenga en cuenta que la lista tampoco contiene realmente los valores: hace referencia, es decir, los comparte.

4

No, no funciona así.

Usted puede tratar de:

one, two, three = range(1, 4) 

Este trabajo mediante la definición de las variables de una asignación múltiple. Del mismo modo que puede usar a, b = 1, 2. Esto desenrollará el range y asignará sus valores a las variables LHS, por lo que se parece a su ciclo (excepto que funciona).

Otra opción (que no lo recomendaría en un programa real ...) sería introducir los nombres de variables en una declaración Ejecutivo:

names = ['one', 'two', 'three'] 
num = 1 
for name in names: 
    exec "%s = %s" % (name, num) 
    num += 1 
print one, two, three     
+0

Esto funciona, pero esta respuesta es un poco corto en qué el camino OPs * no * funciona. – John

+0

Es cierto eso. Como otros ya lo han cubierto, explicaré por qué esto funciona según eso. – TryPyPy

2

Una variable no existe hasta que lo crea . Simplemente hacer referencia a una variable no es suficiente para crearla. Cuando hace [one, two, three], hace referencia a las variables one, two y three antes de que se creen.

8

Puede acceder al diccionario de variables globales con la función integrada globals(). El diccionario utiliza cadenas de claves, es decir, puede crear variables con nombres que se dan como cadenas en tiempo de ejecución, así:

>>> var_names = ["one", "two", "three"] 
>>> count = 1 
>>> for name in var_names: 
... globals()[name] = count 
... count += 1 
... 
>>> one 
1 
>>> two 
2 
>>> three 
3 
>>> globals()[raw_input()] = 42 
answer 
>>> answer 
42 

Recommended reading

+0

Por supuesto, esto tiene una utilidad limitada. –

Cuestiones relacionadas