Un recordatorio a mi mismo y a quien pueda ser útil ... si se desease por ejemplo, crear variables enteras a1, a2, a3, a4 y a5 cuyos valores respectivos sean: 2, 4 ,6 ,8 y 10, esto inicialmente lo podríamos hacer con:
a1 = 2 a2 = 4 a3 = 6 a4 = 8 a5 = 10 print a1 print a2 print a3 print a4 print a5
.. pero .. y si fuesen demasiadas variables ¿?
Para estos casos, podriamos usar la declaración exec que nos permite ejecutar instrucciones en el intérprete de python.for i in range(5):var='a'+str(i+1) exec "%s=2*(i+1)" %var exec "print %s" %var
De esta manera podemos cambiar la cantidad de variables a nuestro gusto simplemente cambiando el range(5).
* Tambien, ... una función a tener en cuenta es eval, que evalúa una expresión, por ejemplo:
print eval('2+2') print eval('(2.0*5)/3')
>> exec>> eval

2 comentarios:
Gracias por el post, me resultó muy útil para una apliacición que intento hacer de resolver sudokus y no quería hacer 81 entrys.
Pero tengo un problema, y es que no una vez creadas las variables, no puedo acceder a ellas. Por ejemplo, si pruebas el código que has puesto
for i in range(5):
var='a'+str(i+1)
exec "var=2*(i+1)"
exec "print var"
print a1
print a2
print a3
print a4
print a5
Verás que cuando acabe el bucle no puedes acceder a ellas.
Gracias por el aviso, no lo había notado, lo he corregido editando las dos últimas lineas:
exec "var=2*(i+1)"
exec "print var"
por:
exec "%s = 2*i" %var
exec "print %s" %var
Ahora sí se puede acceder desde fuera.
Publicar un comentario en la entrada