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