creacion de variable al vuelo en ciclos
Chema Cortés
py en ch3m4.org
Vie Abr 18 14:30:22 CEST 2003
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
El Vie 18 Abr 2003 11:04, Carlos Amado Chan Pacheco escribió:
> eh estado tratado de hacer que una variable tome un nombre que esta
> conformado por dos partes: 1.- 'inputs'
> 2.- un numero consecutivo
>
> inputs='input'+str(i)
>
> y que ese nombre que resulte, hacer que otra variable tome ese nombre,
> pero que le asigne algun otra cosa.
No acabo de entenderlo bien, pero sospecho por dónde van los tiros.
Antes de empezar, piensa en las variables como si tuvieras un diccionario
donde el nombre de la variable actúa como clave. No es sólo una suposición.
Puedes utilizar las funciones globals() para acceder al diccionario de las
variables globales, y locals() para acceder a las variables locales (dentro
de una función/método).
Para crear variables "al vuelo" no necesitas la función eval():
for i in range(1,10):
inputs="input"+str(i)
outputs="out"+str(i)
lineas="lineas"+str(i)
globals()[inputs]=file(str(i),'r')
globals()[outputs]=file(outputs,'a')
globals()[lineas]=eval(outputs).readlines()
eval(inputs).close()
Creo que es más o menos lo que proponías. Decirte que la función eval() posee
dos argumentos adicionales para pasarle dos diccionarios, uno de variables
globales y otro de locales. Por defecto ambos argumentos equivalen a
globals(), con lo que me hubiera dado igual haber puesto en su lugar:
globals()[outputs]
Una vez visto ésto, casi-casi te puedo asegurar que no lo necesitas y que
tienes otra forma de hacer lo mismo de modo más "pitónico". Por ejemplo:
def Procesar(inputs,outputs):
lineas=file(inputs,'r').readlines()
file(outputs,'a').writelines(lineas)
for i in range(1,10):
inputs="input"+str(i)
outputs="out"+str(i)
Procesar(inputs,outputs)
- --
Chema Cortes (py en ch3m4.org)
http://py.ch3m4.org
PGPKEY: mailto:pgpkey en ch3m4.org?subject=__PGPKEY__
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.0.7 (GNU/Linux)
iD8DBQE+n+/jHLTQrABk8H0RAqmkAKDXhqdLd58epnjppVATMrn8Kw3gdQCfYh5E
fx9TmhCCT95E7gF7H7ck+wM=
=Rvz0
-----END PGP SIGNATURE-----
Más información sobre la lista de distribución Python-es