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