var_list = [one, two, three] num = 1 for var in var_list: var = num num += 1
Lo anterior me da un error de que ‘uno’ no existe. ¿No puedes asignar de esta manera? Quiero asignar un número creciente para cada var en la lista.
Las variables de Python son nombres para valores. Realmente no “contienen” los valores.
for var in var_list:
, ‘var’ se convierte en un nombre para cada elemento de la lista. Dentro del bucle, var = num
no afecta a la lista: en cambio, hace que var
deje de ser un nombre para el elemento de la lista, y en su lugar comienza a ser un nombre para cualquier num
nombres actualmente.
De manera similar, cuando creas la lista, si one
, two
y three
no son ya nombres de valores, entonces no puedes usarlos así porque estás pidiendo crear una lista de los valores que tienen esos nombres (y luego causa que var_list
sea un nombre para esa lista). Tenga en cuenta que la lista tampoco contiene los valores: hace referencia, es decir, los comparte.
Puede acceder al diccionario de variables globales con la función incorporada globals()
. El diccionario usa cadenas para las claves, lo que significa que puede crear variables con nombres dados como cadenas en tiempo de ejecución, como esto:
>>> 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
Lectura recomendada
No, no funciona así.
Puedes probar:
one, two, three = range(1, 4)
Esto funciona definiendo las variables en una asignación múltiple. Así como puedes usar a, b = 1, 2
. Esto desenrollará el range
y asignará sus valores a las variables de LHS, para que se vea como su bucle (excepto que funciona).
Otra opción (que no recomendaría en un progtwig real …) sería introducir los nombres de las variables en una sentencia exec:
names = ['one', 'two', 'three'] num = 1 for name in names: exec "%s = %s" % (name, num) num += 1 print one, two, three
Una variable no existe hasta que la creas. Simplemente hacer referencia a una variable no es suficiente para crearla. Cuando haces [one, two, three]
estás haciendo referencia a las variables one
, two
y three
antes de crearlas.
Creo que este enfoque es más sencillo.
var_list = [1, 2, 3] num = 1 for index,var in enumerate(var_list): var_list[index] = num num += 1