2009-04-20 17 views
9

Czy możesz rozwinąć bieżący stan "bloków" (w sensie Rubiego) w Pythonie?Bloki kodu w pythonie

Jakie są konstrukcje językowe w pythonie? Jak mają się one do innych języków (np. Ruby, Smalltalk, [insert more])? Czy może brak pytonów takich konstrukcji?

Do tej pory rozumiałem rzecz: lambda; to tylko jedna linia, ale może jest blisko. A co z "dekoratorami" i yield w tym kontekście?

Używam również starych wersji Pythona w niektórych projektach. Jakie konstrukty zostały wprowadzone w jakiej wersji Pythona (2.5,2.6, ...) lub są planowane w przyszłych wersjach?

Czy można połączyć ciekawe artykuły na ten temat, które wyjaśniają te rzeczy w Pythonie, a także w porównaniu do innych języków i mogą być interesujące dla kogoś, kto chce poszerzyć podstawową wiedzę Pythona.

Proszę, pomóż proszę poprawić to pytanie do właściwego języka angielskiego i właściwego IT.

[edytuj] Przyjąłem odpowiedź, która w ciągu zaledwie 2 godzin całkowicie zmieniła mój styl kodowania. Nie wiedziałem, że to takie proste. Doceniam również linki Ci dał, dziękuję bardzo. [/ Edit]

+0

Czy powinienem utworzyć społeczność wiki (cw)? Nie do końca rozumiem, co oznacza cw. – user89021

+0

Społeczność wiki oznacza, że ​​próg do edycji jest znacznie niższy (750 rep vs. 2000) i nikt nie zarabia na repakcie ani na pytanie, ani na odpowiedzi. Zwykle jest używany do pytań na temat faq lub pytań "zabawnych". To normalne pytanie, więc nie rób tego cw. –

Odpowiedz

9

funkcje są członkowie pierwszej klasy w Pythonie

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

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

więc można przekazać funkcji wokół wszystko, co chcesz. możesz zrobić to samo z każdym obiektem wywoływanym w pythonie.

+0

to jest takie fajne, dziękuję, przeczytaj także edycję z mojego pytania – user89021

2

lambda jest najbliższym odpowiednikiem bloku Ruby i ograniczeniem do jednej linii is intentional. Zwykle argumentuje się, że aniliniowe funkcje wielowierszowe (bloki w Rubim) są mniej czytelne niż definiowanie funkcji gdzieś z nazwą i przekazywanie jej, jak pokazano w SilentGhost's answer.

0

def jest odpowiednikiem instrukcji przypisania, która wiąże tylko funkcję obiekt do zmiennej referencyjnej obiektu.

Zmienna wartości odniesienia obiektu może być następnie użyta do wywołania obiektu funkcji do wykonania.