Manejo simple de parámetros
Chema Cortés
ch3m4 en ch3m4.org
Mie Jun 11 13:30:25 CEST 2003
Esteban Manchado Velázquez escribió:
> En Python, lo único que se me ocurre es:
>
> if len(sys.argv) > 0:
> server = sys.argv.pop(0)
> else:
> server = 'valor'
>
> Lo cual es ligeramente ortopédico :-)
Como bien dices, no es cosa de hacer una "guerra" de lenguajes, como
tampoco es cosa de explicar porqué se tomaron ciertas decisiones en el
diseño del lenguaje. En el caso del .pop() se consideró peligroso su
efecto colateral de alterar la lista. En lugar de hacer pop(0) es mejor
dejar la lista en paz e iterar secuencialmente. Por ejemplo, en python 2.3:
params=['miservidor','miusuario','s3cr3t4']
for i,value in enumerate(sys.argv[1:]):
params[i]=value
> Me he puesto a pensar, y no recuerdo
> haber visto una sintaxis cómoda del estilo Perl/Ruby para hacer algo así: no
> me suena que haya operador ternario (?:)
Ante la petición de muchos programadores, se va a introducir un operador
ternario. Se ha realizado una votación al respecto, aunque quien decide
será Guido, y Guido opinaba que tenía que ser algo así:
a=if <expr>: <value1> else: <value2>
Ahora mismo podrías tener algo "similar":
a=[<valueFalse>,<valueTrue>][bool(<expr>)]
Aunque te recomiendo la vía "explícita" ;-)
> ni un operador de «cortocircuito»,
> como || y &&.
En realidad sí que están como or y and (respectivamente), aunque no
enmascaran las excepciones. Para ésto hay que usar el try..except ó el
try..finally
> Y claro, si hago un pop a una lista, y no hay ningún elemento,
> no devuelve None, sino que salta una excepción.
Como te he dicho, es mejor que no alteres la lista sin motivo. ¿Qué tal
te iría ésto en lugar del pop?
a, lista = lista[0:0],lista[1:]
Más información sobre la lista de distribución Python-es