2009-04-20 22 views
9

¿Puede explicar el estado actual de "bloques" (en el sentido de Ruby) en Python?Bloques de código en python

¿Cuáles son las construcciones idiomáticas que existen en python? ¿Cómo se comparan con otros idiomas (como Ruby, Smalltalk, [insertar más])? ¿O Python carece de tales construcciones?

Hasta ahora he entendido la cosa lambda; es solo una línea, pero tal vez se acerque. ¿Qué hay de "decoradores" y yield en este contexto?

También estoy usando versiones antiguas de Python en algunos proyectos. ¿Qué construcciones se introdujeron en qué versión de Python (2.5,2.6, ...) o están planificadas en versiones futuras?

Puedes vincular artículos interesantes sobre el tema que explican esto para Python y también comparan con otros idiomas y pueden ser interesantes para alguien que quiera ampliar el conocimiento básico de Python.

Y por favor, siéntase libre de corregir esta pregunta al inglés correcto y al lenguaje de TI adecuado.

[edit] Acepté una respuesta que en solo 2 horas cambió por completo mi estilo de codificación. No sabía que fuera así de simple. También aprecio los enlaces que diste, muchas gracias. [/ editar]

+0

¿Debo hacerlo wiki de comunidad (cw)? No entiendo muy bien qué significa cw. – user89021

+0

wiki de la comunidad significa que el umbral para la edición es mucho más bajo (750 repeticiones frente a 2000) y nadie gana representante por la pregunta o respuestas. Generalmente se usa para preguntas frecuentes o para preguntas "divertidas". Esta es solo una pregunta normal, así que no lo hagas cw. –

Respuesta

9

funciones son los miembros de primera clase en Python

def add(x, y): 
    return x + y 

a = add   # bind 
b = a(34, 1)  # call 

lo que puede pasar alrededor funciones todo lo que quiera. usted puede hacer lo mismo con cualquier objeto invocable en Python.

+0

esto es genial, gracias, por favor lea también la edición de mi pregunta – user89021

2

lambda es el equivalente más cercano a un bloque Ruby, y la restricción a una línea is intentional. Por lo general, se argumenta que las funciones anónimas multilínea (bloques, en Ruby) son generalmente menos legibles que la definición de la función en alguna parte con un nombre y su aprobación, como se ilustra en SilentGhost's answer.

0

El def es equivalente a una sentencia de asignación, que sólo se une a la función Objeto a la variable de referencia del objeto.

La variable de referencia del objeto se puede usar para llamar al objeto de función para ejecutar.

Cuestiones relacionadas