[Python-es] Python y/o ruby para no programadores

Chema Cortes pych3m4 en gmail.com
Jue Feb 11 01:48:31 CET 2010


El día 10 de febrero de 2010 14:48, Olemis Lang (Simelix)
<olemis+py en gmail.com> escribió:

Intentaré ser breve pues, según parece, estamos aburriendo al personal:


> Acerca de los módulos, hay otras cosas más q quería mencionar (y ojalá
> tenga tiempo de ampliar el debate, pero si no es hoy será otro día ;o)
> :
>
>  - Cual es la diferencia (considerando el ejemplo ;o) entre un diccionario y
>    un objeto (e.g. módulo) ? Mi opinión es ninguna, solo q tener un módulo
>    para cada switch (q a la postre no es una abstracción de nada, sino más
>    bien algo q debería quedar en el plano sintáctico para especificar flujo del
>    programa ;o) es IMHO algo abusivo

Por éso mismo nadie implementa switchs en python con módulos. Casi
siempre que he necesitado algo parecido he acabado por especializar
una clase.


>  - IMHO las funciones del switch no deben quedar expuestas al riesgo de ser
>    remplazadas (monkey-patched ?) al menos a no ser q eso sea la intención,
>    (y no pondré ejemplos, pero espero q se comprenda q eso no es lo más
>    raro del mundo) puesto a que en ese caso el funcionamiento sería
>    impredecible si una librería externa hace unas cuantas modificaciones.

Una alternativa sería usar una clase con __slots__. De todos modos se
debe considerar que en python hay muchos elementos que se pueden
asignar arbitrariamente (eg: True y False).


> Haber, en el diccionario de la RAE encuentro (lástima q no haya
> permalink :o( ... ) q un uso de `carencia` es
>
> 1. f. Falta o privación de algo.
>
> por tanto si Python no tiene bloques inline entonces carece de ellos.
> De todas formas, si hay preferencias por otra palabra no hay problemas
> . Lo q tiene q quedar claro es q Python no tiene bloques inline

Insisto que no es una carencia ya que se puede hacer igualmente,
aunque no resulta elegante. Te lo explico con código (los sensibles
que miren para otro lado):

if a==1:
  def f(): print 1
elif a==2:
  def f(): print 2
elif a==3:
  def f(): print 3
else:
  def f(): print 99

f()



Más información sobre la lista de distribución Python-es