2009-04-20 6 views
9

È possibile elaborare lo stato corrente di "blocchi" (in senso di Ruby) in Python?Blocchi di codice in python

Quali sono i costrutti del linguaggio esistenti in Python? Come si confrontano con altre lingue (come Ruby, Smalltalk, [inserisci altro])? O manca a Python tali costrutti?

Finora ho capito la cosa lambda; è solo una linea, ma forse si avvicina. Che dire di "decoratori" e yield in questo contesto?

Sto anche utilizzando vecchie versioni Python in alcuni progetti. Quali costrutti sono stati introdotti in quale versione di Python (2.5.2.6, ...) o sono previsti nelle versioni future?

Puoi collegare articoli interessanti sull'argomento che spiegano questa roba per Python e anche il confronto con altri linguaggi e potrebbe essere interessante per qualcuno che vuole estendere la conoscenza di base di Python.

E, per favore, sentitevi liberi di correggere questa domanda in inglese corretto e corretto linguaggio IT.

[modifica] Ho accettato una risposta che in sole 2 ore ha totalmente cambiato il mio stile di codifica. Non sapevo che fosse così semplice. Apprezzo anche i link che hai dato, vi ringrazio molto. [/ Modifica]

+0

Devo renderlo wiki della comunità (cw)? Non capisco cosa voglia dire cw. – user89021

+0

La wiki della comunità indica che la soglia per la modifica è molto più bassa (750 rep contro 2000) e nessuno guadagna un rep per la domanda o le risposte. Viene generalmente utilizzato per domande faq o per domande "divertenti". Questa è solo una domanda normale, quindi non farcela. –

risposta

9

funzioni sono i membri di prima classe in pitone

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

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

in modo da poter passare le funzioni intorno a tutto quello che volete. puoi fare lo stesso con qualsiasi oggetto callable in python.

+0

questo è così bello, grazie, per favore leggi anche la modifica dalla mia domanda – user89021

2

lambda è l'equivalente più vicino a un blocco Ruby e la restrizione a una riga is intentional. In genere si sostiene che le funzioni anonime multilinea (blocchi, in Ruby) sono in genere meno leggibili rispetto alla definizione della funzione da qualche parte con un nome e passando quella, come illustrato in SilentGhost's answer.

0

Il def è equivalente di un'istruzione di assegnazione, che si lega solo la funzione oggetto alla variabile di riferimento dell'oggetto.

La variabile di riferimento oggetto può quindi essere utilizzata per chiamare l'oggetto funzione da eseguire.