it-swarm-eu.dev

Wie kann ich lernen, Pythonic-Code effektiv zu schreiben?

Eine Google-Suche nach "Pythonic" zeigt eine Vielzahl von Interpretationen. Die Wikipedia-Seite sagt:

Ein häufiger Neologismus in der Python - Community ist Pythonic, der eine Vielzahl von Bedeutungen im Zusammenhang mit dem Programmstil haben kann. Zu sagen, dass Code Pythonic ist, bedeutet, dass er Python spricht gut, dass es natürlich ist oder die Sprache fließend beherrscht. Wenn man von einer Schnittstelle oder einem Sprachmerkmal sagt, dass es Pythonic ist, heißt das auch, dass es gut mit Python) funktioniert Redewendungen, dass seine Verwendung gut mit dem Rest der Sprache passt.

Es wird auch der Begriff "unpythonisch" erörtert:

Im Gegensatz dazu ist ein Zeichen für unpythonischen Code, dass er versucht, C++ (oder LISP, Perl oder Java) Code in Python zu schreiben, dh eine grobe Transkription anstelle einer idiomatischen Übersetzung von Formularen aus einer anderen Sprache bietet. Das Konzept der Pythonalität ist eng mit Pythons minimalistischer Philosophie der Lesbarkeit verbunden und vermeidet den Ansatz "Es gibt mehr als einen Weg, dies zu tun". Unlesbarer Code oder unverständliche Redewendungen sind unpythonisch.

Was bedeutet der Begriff "Pythonic"? Wie lerne ich, es effektiv in der Praxis anzuwenden?

46
user39685

Ich habe festgestellt, dass die meisten Menschen ihre eigenen Interpretationen dessen haben, was es wirklich bedeutet, "pythonisch" zu sein. Aus Wikipedia:

Ein häufiger Neologismus in der Python - Community ist Pythonic, der eine Vielzahl von Bedeutungen im Zusammenhang mit dem Programmstil haben kann. Zu sagen, dass Code Pythonic ist, bedeutet, dass er Python spricht gut, dass es natürlich ist oder die Sprache fließend beherrscht. Wenn man von einer Schnittstelle oder einem Sprachmerkmal sagt, dass es Pythonic ist, heißt das auch, dass es gut mit Python) funktioniert Redewendungen, dass seine Verwendung gut mit dem Rest der Sprache passt.

Im Gegensatz dazu ist ein Zeichen für unpythonischen Code, dass er versucht, C++ (oder LISP, Perl oder Java) Code in Python zu schreiben, dh eine grobe Transkription anstelle einer idiomatischen Übersetzung von Formularen aus einer anderen Sprache bietet. Das Konzept der Pythonalität ist eng mit Pythons minimalistischer Philosophie der Lesbarkeit verbunden und vermeidet den Ansatz "Es gibt mehr als einen Weg, dies zu tun". Unlesbarer Code oder unverständliche Redewendungen sind unpythonisch.

Ich habe festgestellt, dass mehr als einmal mehr "Pythonic" -Beispiele von Leuten stammen, die versuchen, mit Python] Redewendungen klug zu sein und (wieder mehrmals) ihren Code praktisch unlesbar zu machen (was nicht Pythonic ist).

Solange Sie sich an Pythons Redewendungen halten und vermeiden, C++ (oder andere Sprachstile) in Python zu verwenden, sind Sie Pythonic.

Wie von WorldEngineer hervorgehoben, ist PEP8 ein guter Standard (und wenn Sie VIM verwenden, sind Plugins für PEP8-Flusen verfügbar).


Wirklich, am Ende des Tages, wenn Ihre Lösung funktioniert und nicht absolut schrecklich wartbar und langsam ist, wen interessiert das dann? Mehr als einmal besteht Ihre Aufgabe darin, eine Aufgabe zu erledigen und nicht den elegantesten, möglichst pythonischen Code zu schreiben.


Eine weitere Randnotiz (nur meine Meinung, zögern Sie nicht, deswegen abzustimmen;)): Ich habe auch festgestellt, dass die Python Community) mit einer gefüllt ist. Tonne Ego (nicht, dass die meisten Gemeinschaften nicht sind, es ist nur ein wenig häufiger in Gemeinschaften wie C. und Python). Wenn Sie also das Ego mit falsch interpretierten Interpretationen von "Pythonic" kombinieren, wird dies zu einer Menge grundloser Negativität führen. Nehmen Sie das, was Sie von anderen lesen, mit einem Körnchen Salz. Halten Sie sich an offizielle Standards und Dokumentationen und Sie werden sei in Ordnung.

22
Demian Brecht

Pythonic soll in Python idiomatisch codieren. Es bedeutet, Strukturen und Formatierungen zu verwenden, die für Python vom Standpunkt der Programmierung, aber auch vom Standpunkt der Community-Lesung aus gut funktionieren. Es ist sehr ähnlich, wie K & R lange Zeit den Standard für den C-Programmierstil gesetzt hat. Diese Anleitung zeigt, dass Sie in Python idiomatisch codieren müssen. In dieser Anleitung wird auf PEP 8 verwiesen, daher ist es wahrscheinlich lesenswert.

17
World Engineer

Schreiben von "Pythonic" -Code IMHO nutzt lediglich die (V) HLL-Funktionen, die die Sprache bietet, effektiv. Als allgegenwärtiges Beispiel

x, y = 7, 'fuhrer'

Das ist sehr Pythonic. Ich erinnere mich, als ich nach Monaten mit nur Python anfing, C # zu lernen.

int x, y = 10, z;

irgendwie verwirrt mich, aber es dauerte eine Minute, bis ich zu meinen C/C++ - Wurzeln zurückkehrte.

Ein anderer pythonischer Weg ist die Verwendung von Lambdas.

l = [1, 2, 3, 4, 5]
print(sorted(l, key=lambda x: -x))

druckt tatsächlich l sortiert in absteigender Reihenfolge.

Dann gibt es die sehr häufig verwendete, aber sehr wenig verstandene "Ententypisierung" - Wenn sie wie eine Ente geht und spricht, behandeln Sie sie als Ente. Dies ist lose bezogen auf Schnittstellen in anderen OO Sprachen).

Gegebenenfalls werden auch funktionale Programmiermethoden wie die Verwendung von Map und Reduce als Pythonic betrachtet.

Während der Eingabe wurde eine Antwort veröffentlicht, die einen Link "Nizza" enthält. PS: Es ist nicht so, dass Ihr Wissen über Python begrenzt ist. Ich kann wetten, dass Python war nicht Ihre Muttersprache und daher (wie die meisten von uns Pythonisten) ) Du musst lernen, mit der Schlange "idiomatisch" zu werden! Prost!

13
yati sagade
--> import this
The Zen of Python, by Tim Peters

Beautiful is better than ugly.
Explicit is better than implicit.
Simple is better than complex.
Complex is better than complicated.
Flat is better than nested.
Sparse is better than dense.
Readability counts.
Special cases aren't special enough to break the rules.
Although practicality beats purity.
Errors should never pass silently.
Unless explicitly silenced.
In the face of ambiguity, refuse the temptation to guess.
There should be one-- and preferably only one --obvious way to do it.
Although that way may not be obvious at first unless you're Dutch.
Now is better than never.
Although never is often better than *right* now.
If the implementation is hard to explain, it's a bad idea.
If the implementation is easy to explain, it may be a good idea.
Namespaces are one honking great idea -- let's do more of those!

Der pythonische Code lautet:

  • Lesbar
  • Einfach (so einfach wie möglich, aber nicht einfacher)
  • Gut durchdacht
7
Ethan Furman

Jedes Mal, wenn ich versucht habe, eine neue Sprache zu lernen, habe ich festgestellt, dass das Lesen von Code von Leuten, die die Sprache wie ihre Westentasche kennen, nach etwas suchen/fragen, was seltsam aussieht, und dann versuchen, ihren Stil nachzuahmen das Beste, was zu tun ist. Beispiele:

In Python fand ich die Beispiele von Dive Into Python unglaublich nützlich, um loszulegen, da wir uns mit diesem Thema befassen. Sie neigen dazu, nicht nur die Grundlagen von Python zu lehren, sondern auch idiomatisches Python wirklich zu betonen.

Als ich D lernte, lernte ich, indem ich den Code in der Standardbibliothek las, insbesondere einige von Andrei Alexandrescus Meisterwerken , da die Dokumentation zu der Zeit nicht großartig war, weil die Sprache so blutig war.

Beim Erlernen von C++ habe ich eine Codebasis von einem ziemlich guten C++ - Programmierer geerbt und viel über die idiomatische C++ - Programmierung gelernt, weil er darauf bestand, STL-Container als Referenz usw. zu übergeben.

In allen Sprachen finde ich, dass das Durchsuchen der StackOverflow-Fragen zur Sprache und das Betrachten dessen, was Menschen normalerweise tun, um grundlegende Dinge zu erreichen, hilfreich ist.

6
dsimcha

Python ist nicht Java gibt Ihnen möglicherweise nützliche Ratschläge. Ich kann nicht mehr sagen, ohne zu wissen, auf welche Art von Problemen Sie stoßen, aber es ist ein sehr konkreter Ratschlag für Programmierer, die aus einer anderen Sprache (in diesem Fall speziell Java) stammen, wie man python anders macht) .

3
maxpolun

Jemand sagte zu paraphrasieren, um zu lernen, was Pythonic ist, einfach einen Code herauszuschlagen. Dem stimme ich nicht zu. Wenn Sie gerne sehr dichten Code schreiben, ist dieser nicht pythonischer.

Eine Möglichkeit, Ihnen bei der Definition von Pythonic zu helfen, besteht darin, sich selbst zu fragen: "Warum sollte ich (dh Sie) die Sprache Python?) Verwenden?" Was reizt Sie daran?

Für mich ist es Lesbarkeit und mangelnde Kompilierung und Open Source (so ziemlich alles). Ich kann Tonnen von Bibliotheken herunterladen und ihren Quellcode mit weniger Stress bei der Lizenzierung lesen als viele andere Sprachen.

Für mich Python ist optisch wunderschön. Guido (der Schöpfer von Python) beweist mir auch immer wieder durch seine Antworten in PEPS und Diskussionen), dass seine Entscheidungen, wie er die Sprache gemacht hat, meinen überlegen sind eigene Vorstellungen davon, wie es hätte geschaffen werden sollen.

Für mich ist ein großartiger Programmierer jemand mit sehr fundierten Entscheidungsfähigkeiten darüber, welchen Weg er beim Codieren gehen soll. Python hilft mir dabei, diese Entscheidungen schnell zu treffen.

Durch die Vereinfachung der Quellcodesyntax durch Ermöglichen der Eingabe von Enten anstelle des expliziten Castings und der Erwartung, dass Codierer, die Ihren Code überprüfen, "sich gut benehmen sollten, Codierer", führt dies zu etwas, das ich auch "Pythonic" nenne.

Es gibt also zwei Seiten von Pythonic. Einer ist syntaktisch, der andere ist die Praxis von. Wie kann man die tiefere Seite von "Pythonic" erklären?

In Python ist es keine große Sache, dies zu tun: alist = ['eins', 'zwei', 'drei\n'] alist.append ((1234, 'Atuple'))

und das Tupel wird der Liste hinzugefügt, ohne dass Objekttypen berücksichtigt werden. Der pythonische Teil ist nicht, dass Sie dies tun KÖNNEN, sondern dass Ihr Code dies ERWARTEN und einfach arbeiten/anpassen sollte.

Was auch immer auf dem -alist- Objekt funktioniert, sollte mit der Idee geschrieben werden, dass ein anderer Codierer hereinkommen und der Liste einen Nicht-String hinzufügen könnte und dass die Quellcode-Anpassung durch den neuen Codierer nicht schwierig sein sollte. Das ist schließlich der Vorteil von ducktype.

2
DevPlayer