Co znaczy pythonic? [Zamknięte]

88

Na wielu stronach internetowych często widzę komentarze, że kod nie jest pythonowy lub że istnieje bardziej pythonowy sposób osiągnięcia tego samego celu.

Co w tym kontekście oznacza pythonic? Na przykład, dlaczego tak jest

while i < someValue:
   do_something(list[i])
   i += 1

nie pythonic while

for x in list:
   doSomething(x)

jest pythonic?

Jon
źródło
11
Zen of Python , What is Pythonic , etc ...
Martin Tournoij
To jest pytanie niezwiązane z tematem. Mogłeś dostarczyć mały przykładowy kod, aby uczynić go bardziej tematycznym.
ρss

Odpowiedzi:

103

Wykorzystywanie funkcji języka Python do tworzenia kodu, który jest jasny, zwięzły i łatwy w utrzymaniu.

Pythonic oznacza kod, który nie tylko ma właściwą składnię, ale jest zgodny z konwencjami społeczności Pythona i używa języka w sposób, w jaki jest przeznaczony.

Być może najłatwiej to wyjaśnić za pomocą negatywnego przykładu, tak jak w powiązanym artykule z innych odpowiedzi. Przykłady kodu niepytonicznego często pochodzą od użytkowników innych języków, którzy zamiast uczyć się wzorców programowania w Pythonie, takich jak listy składane lub wyrażenia generatora, próbują łomem we wzorcach częściej używanych w C lub Javie. Pętle są tego szczególnie powszechnymi przykładami.

Na przykład w Javie mógłbym użyć

for i in (i; i < items.length ; i++)
 {
  n = items[i];
 ... now do something
 }

W Pythonie możemy spróbować powtórzyć to za pomocą pętli while, ale byłoby to czystsze w użyciu

for i in items:
  i.perform_action()

Lub nawet wyrażenie generatora

(i.some_attribute for i in items)

Zasadniczo, gdy ktoś mówi, że coś jest nietypowe, mówi, że kod można przepisać w sposób, który lepiej pasuje do stylu kodowania w Pythonie.

Wpisanie import thisw wierszu poleceń daje podsumowanie zasad Pythona. Mniej znane jest to, że kod źródłowy programu import thisjest zdecydowanie i zgodnie z projektem, niepytoniczny! Spójrz na to, aby zobaczyć, czego nie robić.

James
źródło
26
Przy okazji, kod źródłowy „zaimportuj to” jest tutaj: github.com/python/cpython/blob/master/Lib/this.py
Gautam
Jaki byłby przykład z innej dziedziny? Jak gotowanie, projektowanie, prowadzenie samochodu…?
Daniel Springer
2
Na przykład bardziej złożonego kodu, „niepytoniczna” implementacja szyfru Vigenere jest stopniowo bardziej „pythonowa” w tej odpowiedzi (ujawnienie: mój kod i opinie): stackoverflow.com/questions/2490334/ ...
Nick
18
Myślę, że powinienem zostawić tutaj komentarz, biorąc pod uwagę moją nazwę użytkownika
Pythonic
Warto również zauważyć, że ogólny termin jest „idiomatyczny”
Louis Maddox