[Python-es] Python y/o ruby para no programadores
Olemis Lang (Simelix)
olemis+py en gmail.com
Mie Feb 10 14:48:14 CET 2010
2010/2/9 Chema Cortes <pych3m4 en gmail.com>:
> El mar, 09-02-2010 a las 15:01 -0500, Olemis Lang (Simelix) escribió:
>> 2010/2/9 Chema Cortes <pych3m4 en gmail.com>:
>> > Piensa un poco lo que estás diciendo:
>> >
>> > "Crea un bloque "case" de funciones anónimas que se selecciona según
>> > una clave de diccionario". Éso no es más que un "módulo" de python:
>> >
>>
>> Voy a ser sincero y, para poder entender, voy a confesar que no
>> entendí nada del comentario. Al menos yo estaba hablando de casos bien
>> conocidos [1]_ [2]_ [3]_ ... y mencionados por ahí hace mucho tiempo
>> ya ...
>>
[...]
>>
> Lo que venía a decir es que resulta paradójico que tengas que ir
> etiquetando bloques anónimos por la única razón de no querer definirlos
> apropiadamente como funciones.
>
Bueno, puede ser q eso era la intención, pero lo q está escrito es
«Piensa un poco lo que estás diciendo:» y, bueno, espero q haya
quedado claro q somos ya varios los q no hemos pensado bien durante
mucho tiempo, incluyendo la FAQ de Py. Solo eso ;o)
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
- 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.
Ejemplo :
{{{
#!python
# Espero q se concentren en la idea y no en los detalles del ejemplo ;o)
def a(): pass
def b(): pass
def d(): pass
def c(x):
{'a': a, 'b': b}.get(x, d)()
# En otra parte o módulo
a, d = b, a
}}}
- El if / elif trabaja en O(n) en el peor caso mientras que el
dict-based switch
trabaja en O(1)
- La solución con bloques inline puede ser más eficiente al no tener que
construir el dict dentro de la llamada de la función ;o)
> Lo de usar un módulo lo ponía como ejemplo donde tener todas las
> funciones agrupadas accesibles por una clave: el nombre de la función.
>
ok, pero me sonó a matar mosquitos con un F-16
>> > Por supuesto que con los bloques de código se puede conseguir que el
>> > código sea más legible y elegante; pero tampoco es para decir que en
>> > python no haya nada parecido o que represente una carencia del
>> > lenguaje.
>>
>> Bueno esto no quiere decir q Python sea más o menos malo. Solo q según
>> el significado de la palabra si no lo tiene es una carencia, ¿no?
>
> Yo lo llamaría "carencia" si hubiera una "necesidad"; como no la hay,
> como mucho lo llamaría una futura "mejora".
>
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
> Espero que haya quedado algo más claro mis comentarios.
;o)
> Yo también eché
> de menos los bloques de código en python, algo que ya usaba
> habitualmente con clipper 5.3 mucho antes de existir ruby.
>
/me using Smalltalk
--
Regards,
Olemis.
Blog ES: http://simelo-es.blogspot.com/
Blog EN: http://simelo-en.blogspot.com/
Featured article:
Embedding pages? - Trac Users | Google Groups -
http://feedproxy.google.com/~r/TracGViz-full/~3/-XtS7h-wjcI/e4cf16474aa3cb87
Más información sobre la lista de distribución Python-es