Sintaxis práctica.
Pepe Aracil
pepe en diselpro.com
Sab Jun 5 16:33:08 CEST 2004
El Sábado, 5 de Junio de 2004 02:19, Ernesto Revilla escribió:
> Hola,
>
> Pepe Aracil escribió:
> >Hola.
> >
> >Como adivinareis, llevo poco tiempo con python ( 4 ó 5 meses). Vengo de
> >programar en object pascal (delphi) y hay veces que dudo si podría sacar
> > mas partido a la "plasticidad" de python.
> >
> >Por Ej.
> >
> >if a > b :
> > c = 25
> >else:
> > c = 50
> >
> >se podría substituir por:
> >
> >c=(50,25)[a>b]
>
> Esto me parece bastante poco legible. Durante un tiempo se hablaba de
> introducir un nuevo operador ternario en Python, que funciona como en
> C: c = a>b ? 25 : 50 pero al final creo que no se pusieron de
> acuerdo en la sintaxis.
Un booleano que indexa una tupla, no es que sea el colmo de la legibilidad,
pero se entiende. Se ofusca un poco mas cuando la tupla contiene funciones.
def verdadero():
print "Verdadero"
def falso():
print "Falso"
(falso,verdadero)[True]()
¡¡ Uff !! esto ya empieza a parecer Perl :)
>
> >otro Ej.
> >
> >if a == 25 or a == 50 or a ==75 :
> > pass
> >
> >se podría substituir por:
> >
> >if a in (25,50,75):
> > pass
> >
> >
> >Lo que para los programadores experimentados en python puede resultar
> > obvio, los que empezamos y venimos de otros lenguajes de más bajo nivel,
> > no lo es tanto.
> >
> >¿Sabéis más casos prácticos en los que se pueda extraer más jugo a la
> > sintaxis de python?
>
> Supongo que hay cientos de cosas:
>
> if a> 10 and a< 20: .... -> if 10 < a < 20: ....
>
> muy matemático, pero pocos programadores de Python lo saben.
>
Ok, tomo nota. ;)
> Valores por defecto:
> supon que hay una variable que puede contener un valor (!= 0) o None:
> valor = variable or valorPorDefecto (atención, no distingue 0 te None)
Si, este es muy bueno :D
supongo que querrías decir variable = valor or valorPorDefecto.
> una de mis expresiones favoritas son las comprehension list:
>
> [a*a for a in range(100) if a % 2 == 0]
>
> Los cuadrados de todos los númeres pares del conjunto [0,100)
>
> La versión explícita es la siguiente:
> res=[]
> for a in range(100):
> if a % 2 == 0:
> res.append(a*a)
>
> así que son 4 líneas en una.
>
> si trabajas con diccionarios
>
> for clave in diccionario: ....
>
> o:
>
> for clave, valor in diccionario.items()
>
> algunas veces, en concreto en la programación con bases de datos, tienes
> por una parte los nombres de los campos y por otra los valores y te hace
> falta convertirlo en un diccionario o mapping de tuplas:
> cur.description # lista de campos
> fila = res[0] # recupera primera fila
> dicc = dict( zip( [descrCampo[0] for descrCampo in cur.description], fila))
>
> la comprehension list sacar el primer elemento de la tupla de la
> descripción de cada campo, es decir, el nombre. zip convierte dos listas
> separadas en una lista de tuplas: [ (a1, b1), (a2, b2), (a3, b3), ... ]
>
> y así miles de cosas.
>
>
Tomo buena nota y Gracias.
Más información sobre la lista de distribución Python-es