Wyszukiwanie w Google hasła „python” ujawnia szeroki zakres interpretacji. Strona wikipedia mówi:
Powszechnym neologizmem w społeczności Python jest python, który może mieć szeroki zakres znaczeń związanych ze stylem programu. Stwierdzenie, że kod jest pythonowy, oznacza, że dobrze używa idiomów Pythona, że jest naturalny lub wykazuje płynność w języku. Podobnie mówiąc o interfejsie lub funkcji językowej, że jest on pythoniczny, oznacza to, że działa dobrze z idiomami Pythona, że jego użycie dobrze łączy się z resztą języka.
Omawia także termin „niepythonic”:
W przeciwieństwie do tego, znakiem niepytonicznego kodu jest to, że próbuje napisać kod C ++ (lub Lisp, Perl lub Java) w Pythonie - to znaczy zapewnia szorstką transkrypcję, a nie idiomatyczne tłumaczenie formularzy z innego języka. Pojęcie pythoniczność jest ściśle związane z minimalistyczną filozofią czytelności Pythona i unikaniem podejścia „jest więcej niż jeden sposób”. Nieczytelny kod lub niezrozumiałe idiomy są niepytoniczne.
Co oznacza termin „python”? Jak nauczyć się skutecznie go stosować w praktyce?
Odpowiedzi:
Przekonałem się, że większość ludzi ma własne interpretacje tego, co tak naprawdę oznacza „Python”. Z Wikipedii:
Przekonałem się, że więcej razy niż nie, tak naprawdę więcej „pytonowych” przykładów pochodzi od ludzi, którzy starają się być sprytni z użyciem idiomów Pythona i (znowu więcej niż nie) czyniąc swój kod praktycznie nieczytelnym (co nie jest Pythonic).
Tak długo, jak trzymasz się idiomów Pythona i unikasz prób używania stylów C ++ (lub innego języka) w Pythonie, jesteś Pythonem.
Jak wskazał WorldEngineer, PEP8 jest dobrym standardem do naśladowania (a jeśli korzystasz z VIM, dostępne są wtyczki do linowania PEP8).
Naprawdę jednak, pod koniec dnia, jeśli twoje rozwiązanie działa i nie jest absolutnie okropnie niemożliwe do utrzymania i powolne, kogo to obchodzi? Częściej niż nie, Twoim zadaniem jest wykonanie zadania, a nie napisanie najbardziej eleganckiego, pythonowego kodu.
Kolejna uwaga (tylko moja opinia, z tego powodu proszę głosować za nią;)): Odkryłem również, że społeczność Pythona jest wypełniona toną ego (nie to, że większość społeczności nie jest , jest tylko trochę bardziej rozpowszechniona w społecznościach takich jak C i Python). Zatem połączenie ego z błędnie interpretowanymi interpretacjami bycia „pytonicznym” będzie miało tendencję do wywoływania wielu bezpodstawnych negatywności. Weź to, co czytasz od innych z odrobiną soli. Trzymaj się oficjalnych standardów i dokumentacji, a wszystko będzie dobrze.
źródło
Pythonic polega na idiomatycznym kodowaniu w Pythonie. Oznacza to używanie struktur i formatowania, które działają dobrze dla Pythona z punktu widzenia programowania, ale także z punktu widzenia czytania przez społeczność. To bardzo przypomina sposób, w jaki K&R ustanawia standard stylu programowania C na długi czas. Ten przewodnik pokazuje, że musisz kodować idiomatycznie w Pythonie. PEP 8 jest wymieniony w tym przewodniku, więc prawdopodobnie warto go przeczytać.
źródło
Pisanie kodu „Pythonic” IMHO efektywnie wykorzystuje funkcje (V) HLL oferowane przez język. Jako wszechobecny przykład
To bardzo pytoniczne. Pamiętam, kiedy zacząłem uczyć się języka C # po miesiącach tylko Python,
jakoś mnie zdezorientowało, ale minęła minuta, zanim wróciłem do korzeni C / C ++.
Innym sposobem Python jest użycie lambdas.
wydrukuje
l
posortowane w kolejności malejącej.Potem jest bardzo używane, ale bardzo mało zrozumiałe „pisanie kaczek” - jeśli chodzi i mówi jak kaczka, traktujesz go jak kaczkę. Jest to luźno związane z interfejsami w innych językach OO.
Również stosowanie funkcjonalnych metod programowania, w stosownych przypadkach, takich jak użycie map i redukcja, są uważane za pythoniczne.
Podczas pisania zobaczyłem odpowiedź, która zawiera ładny link. PS: To nie jest tak, że twoja znajomość Pythona jest ograniczona. Mogę się założyć, że Python nie był twoim pierwszym językiem, a zatem (jak większość z nas pythonistów) musisz nauczyć się „idiomatyczny” z wężem! Twoje zdrowie!
źródło
map
,reduce
,lambda
a takie są idiomatyczne per se. Rozumienie list i wyrażenie generatora są alternatywą i wielu woli je, gdy jest to rozsądnie możliwe (w szczególności są mniej głośne, gdy potrzebujesz lambda). Z pewnością mają swoje zastosowania, a programowanie funkcjonalne pokazuje w innych idiomach (na przykład dekoratorach).(x, y) = (7, 'fuhrer')
- Mam jeszcze prawie zawsze „poprawione”, że bez parens jest najlepszym sposobem, aby to napisać!print(sorted(l, reverse=True))
, co dodatkowo wyraźnie mówi czytelnikowi, co się dzieje. Twój pierwszy przykład też byłby dyskusyjny. To dwa zadania skompresowane w jedno; jest w porządku, ale nie nazwałbym tego bardzo Pythonicznym. Czytelnicy muszą dłużej patrzeć na to, co robi, niż na dwa zadania.Kod Pythonic to:
źródło
Za każdym razem, gdy próbowałem nauczyć się nowego języka, odkryłem, że czytanie kodu przez ludzi, którzy znają język jak na odwrocie dłoni, patrząc w górę / pytając o wszystko, co wygląda dziwnie, a następnie próbuję naśladować ich styl, to: najlepsza rzecz do zrobienia. Przykłady:
W Pythonie, ponieważ zajmujemy się tym tematem, znalazłem przykłady z Dive Into Python niezwykle przydatne na początku. Zwykle uczą nie tylko podstaw Pythona, ale naprawdę podkreślają idiomatyczny Python.
Kiedy uczyłem się D, ponieważ dokumentacja nie była wtedy świetna, ponieważ język był tak przełomowy, nauczyłem się czytając kod do standardowej biblioteki, a konkretnie niektóre arcydzieła Andrei Alexandrescu .
Podczas nauki C ++ odziedziczyłem bazę kodu od całkiem dobrego programisty C ++ i wiele się nauczyłem o idiomatycznym programowaniu w C ++ po jego naleganiu na przekazywanie kontenerów STL przez referencje itp.
We wszystkich językach uważam, że przeglądanie pytań StackOverflow na temat języka i sprawdzanie, co ludzie zazwyczaj robią, aby osiągnąć podstawowe rzeczy, pomaga.
źródło
Python nie jest Javą, może dać ci przydatne porady. Nie można powiedzieć więcej, nie wiedząc, na jakie problemy się napotykasz, ale jest to bardzo konkretna rada dla programistów pochodzących z innego języka (w tym przypadku konkretnie java) na temat tego, jak inaczej robić Pythona.
źródło
Ktoś powiedział, aby sparafrazować, aby dowiedzieć się, co to jest Python, po prostu wypuść trochę kodu. Nie zgadzam się z tym. Jeśli lubisz pisać bardzo gęsty kod, to nie czyni go bardziej Pythonicznym.
Jednym ze sposobów, aby pomóc ci zdefiniować, czym jest Python, jeśli chodzi o ciebie, zapytaj siebie: „Dlaczego miałbym (co oznacza, że) używać języka Python?” Co ci się w tym podoba?
Dla mnie jest to czytelność i brak kompilacji oraz open source (prawie całość). Mogę załadować tony bibliotek i czytać ich kod źródłowy bez większego stresu związanego z licencjonowaniem niż w wielu innych językach.
Dla mnie Python jest piękny wizualnie. Guido (twórca Pythona) również ciągle mi udowadnia, poprzez swoje odpowiedzi w PEPS i dyskusje), że jego wybory dotyczące sposobu, w jaki stworzył język, przewyższają moje własne wyobrażenia o tym, jak powinien zostać stworzony.
Dla mnie świetny programista to ktoś z bardzo świadomymi umiejętnościami podejmowania decyzji o tym, którą drogą wybrać się przy kodowaniu. Dla mnie Python pomaga w szybkim dokonywaniu tych wyborów.
Upraszczając składnię kodu źródłowego, pozwalając na pisanie kaczek zamiast rzutowania typu explicid, a oczekiwanie, że koderzy sprawdzający twój kod „powinni być dobrze zachowanymi programistami”, prowadzi do czegoś, co ja też nazywam „pytonicznym”
Istnieją więc dwie strony tego, co jest Pythonic. Jeden jest składniowy, drugi to praktyka. Jak wyjaśnić głębszą stronę tego, czym jest „Pythonic” ..?
W Pythonie nie ma nic wielkiego do zrobienia: alist = ['one', 'two', 'three \ n'] alist.append ((1234, 'Atuple'))
krotka zostanie dodana do listy bez względu na typy obiektów. Część Pythonic nie polega na tym, że MOŻESZ to zrobić, ale że twój kod powinien tego oczekiwać, a po prostu pracować / dostosowywać.
Cokolwiek działa na obiekcie -alistycznym, powinno być napisane z myślą, że jakiś inny koder mógłby wejść i dodać ciąg znaków do listy oraz że adaptacja kodu źródłowego przez nowy koder nie powinna być trudna. W końcu taka jest zaleta kaczki.
źródło
Kup zalecaną książkę. Przeczytaj to. Powinno to dać ci dobrą podstawę do używania języka oraz w mechanizmie, który powinien odpowiadać stylowi społeczności
źródło