Sintaxis práctica.
Ernesto Revilla
erny en sicem.biz
Sab Jun 5 02:19:04 CEST 2004
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.
>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.
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)
a += 1 # incremento por uno a++ no existe, eso es C.
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.
Más información sobre la lista de distribución Python-es