Eine Google-Suche nach "pythonic" zeigt eine Vielzahl von Interpretationen. Die Wikipedia-Seite sagt:
Ein verbreiteter Neologismus in der Python-Community ist Python, der eine Vielzahl von Bedeutungen im Zusammenhang mit dem Programmstil haben kann. Zu sagen, dass Code pythonisch ist, bedeutet, dass er Python-Redewendungen gut verwendet, natürlich ist oder fließend in der Sprache spricht. Wenn Sie von einer Benutzeroberfläche oder einem Sprachfeature sagen, dass es pythonisch ist, bedeutet dies, dass es gut mit Python-Idiomen zusammenarbeitet und dass seine Verwendung gut mit dem Rest der Sprache harmoniert.
Es wird auch der Begriff "unpythonisch" behandelt:
Im Gegensatz dazu besteht ein Zeichen für unpythonischen Code darin, dass versucht wird, C ++ - (oder Lisp-, Perl- oder Java-) Code in Python zu schreiben. Das Konzept der Pythonität ist eng mit Pythons minimalistischer Philosophie der Lesbarkeit verbunden und vermeidet den Ansatz, dass es mehr als einen Weg gibt, dies zu tun. Unlesbarer Code oder unverständliche Redewendungen sind unpythonisch.
Was bedeutet der Begriff "pythonisch"? Wie lerne ich, es in der Praxis effektiv anzuwenden?
Antworten:
Ich habe herausgefunden, dass die meisten Leute ihre eigenen Interpretationen von dem haben, was "Pythonic" wirklich bedeutet. Aus Wikipedia:
Ich habe festgestellt, dass mehr als einmal "pythonische" Beispiele tatsächlich von Leuten stammen, die versuchen, mit Python-Redewendungen klug umzugehen und (wieder mehr als einmal) ihren Code praktisch unlesbar zu machen (was nicht Pythonisch ist).
Solange Sie sich an Pythons Redewendungen halten und vermeiden, C ++ - (oder andere Sprach-) Stile in Python zu verwenden, sind Sie Pythonisch.
Wie von WorldEngineer hervorgehoben, ist PEP8 ein guter Standard, dem zu folgen ist (und wenn Sie VIM verwenden, gibt es Plugins für das Flusen von PEP8).
Wirklich aber, am Ende des Tages, wenn Ihre Lösung funktioniert und nicht absolut schrecklich wartungsfrei und langsam ist, wen interessiert das? Meistens ist es Ihre Aufgabe, eine Aufgabe zu erledigen und nicht den elegantesten, pythonischsten Code zu schreiben, der möglich ist.
Noch eine Randbemerkung (meiner Meinung nach kann ich das gerne ablehnen;)): Ich habe auch festgestellt, dass die Python-Community mit einer Menge Ego gefüllt ist (nicht, dass es die meisten Communities nicht sind , es ist nur ein bisschen weiter verbreitet) in Communities wie C und Python). Wenn man also das Ego mit falsch interpretierten Interpretationen von "pythonisch" kombiniert, ergibt sich eine Menge unbegründeter Negativität. Nimm, was du von anderen liest, mit einem Körnchen Salz. Halten Sie sich an offizielle Standards und Dokumentationen, und alles wird gut.
quelle
Pythonic ist in Python idiomatisch zu codieren. Es bedeutet, Strukturen und Formatierungen zu verwenden, die für Python vom Standpunkt der Programmierung, aber auch vom Standpunkt des Community-Lesens aus gut funktionieren. Es ist sehr ähnlich, wie K & R lange Zeit den Standard für C-Programmierstile gesetzt hat. Diese Anleitung zeigt, dass Sie in Python idiomatisch codieren müssen. In diesem Handbuch wird auf PEP 8 verwiesen, sodass es sich wahrscheinlich lohnt, es zu lesen.
quelle
Schreiben von "Pythonic" -Code IMHO nutzt die (V) HLL-Funktionen der Sprache nur effektiv aus. Als allgegenwärtiges Beispiel
Das ist sehr pythonisch. Ich erinnere mich, als ich nach Monaten nur mit Python anfing, C # zu lernen,
Irgendwie hat mich das verwirrt, aber es dauerte eine Minute, bis ich zu meinen C / C ++ - Wurzeln zurückgekehrt war.
Ein anderer pythonischer Weg ist die Verwendung von Lambdas.
wird tatsächlich
l
in absteigender Reihenfolge gedruckt .Dann gibt es das sehr viel benutzte, aber weniger verstandene "Entenschreiben" - Wenn es wie eine Ente geht und spricht, behandelt man es wie eine Ente. Dies hängt eng mit Schnittstellen in anderen OO-Sprachen zusammen.
Gegebenenfalls werden auch funktionale Programmiermethoden wie Map und Reduce als pythonisch betrachtet.
Beim Tippen wurde eine Antwort gepostet, die einen netten Link enthält. PS: Es ist nicht so, dass Ihr Wissen über Python begrenzt ist. Ich kann wetten, dass Python nicht Ihre Muttersprache war, und daher müssen Sie (wie die meisten von uns Pythonisten) lernen, mit der Schlange "idiomatisch" zu werden! Prost!
quelle
map
,reduce
,lambda
und so sind idiomatische per se. Listenverständnis und Generatorausdruck sind eine Alternative, und viele bevorzugen sie, wann immer dies vernünftigerweise möglich ist (insbesondere sind sie weniger laut, wenn Sie ohnehin ein Lambda benötigen). Sie haben sicherlich ihre Verwendung, und funktionale Programmierung zeigt sich in anderen Redewendungen (zum Beispiel Dekorateur).(x, y) = (7, 'fuhrer')
- Ich werde jedoch fast immer "korrigiert", dass es der beste Weg ist, ihn ohne Parens zu schreiben!print(sorted(l, reverse=True))
, was dem Leser zusätzlich explizit mitteilt, was los ist? Ich würde auch Ihr erstes Beispiel für umstritten halten. Es sind zwei Aufgaben, die zu einer zusammengefasst sind. Es ist okay, aber ich würde es nicht als sehr pythonisch bezeichnen. Die Leser müssen sich länger damit auseinandersetzen als mit zwei Aufgaben.Der pythonische Code lautet:
quelle
Jedes Mal, wenn ich versucht habe, eine neue Sprache zu lernen, habe ich festgestellt, dass das Lesen von Code durch Leute, die die Sprache wie ihre Westentasche kennen, nach etwas suchen / fragen, das komisch aussieht, und dann versuchen, ihren Stil zu imitieren, das ist 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 vermitteln, sondern auch das idiomatische Python zu betonen .
Als ich D lernte, lernte ich, da die Dokumentation zu der Zeit nicht großartig war, weil die Sprache so blutig war, indem ich den Code in der Standardbibliothek las, insbesondere einige von Andrei Alexandrescus Meisterwerken .
Als ich C ++ lernte, erbte ich eine Codebasis von einem ziemlich guten C ++ - Programmierer und lernte viel über die idiomatische C ++ - Programmierung, indem er darauf bestand, STL-Container als Referenz weiterzugeben usw.
In allen Sprachen finde ich, dass das Durchsuchen der StackOverflow-Fragen zur Sprache und das Hinschauen auf die typischen Schritte zur Erledigung grundlegender Aufgaben hilfreich ist.
quelle
Python ist nicht Java und kann Ihnen nützliche Ratschläge geben. 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 und wissen, wie man Python anders macht.
quelle
Jemand sagte zu paraphrasieren, um zu lernen, was Pythonic ist, schlagen Sie einfach etwas Code aus. Dem stimme ich nicht zu. Wenn Sie sehr dichten Code schreiben möchten, wird er dadurch nicht pythonischer.
Eine Möglichkeit, Ihnen bei der Definition von Pythonic zu helfen, ist die Frage, warum ich (dh Sie) die Python-Sprache verwende. Was reizt dich daran?
Für mich ist es Lesbarkeit und fehlende 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 ist Python 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 eigenen Vorstellungen, wie sie hätte entstehen sollen, überlegen sind.
Ein großartiger Programmierer ist für mich jemand, der über sehr fundierte Entscheidungsfähigkeiten beim Codieren verfügt. Für mich hilft Python dabei, diese Entscheidungen schnell zu treffen.
Indem Sie die Syntax des Quellcodes vereinfachen, indem Sie Enten-Typisierung anstelle von explizidem Typ-Casting zulassen, und die Erwartung, dass sich Codierer, die Ihren Code überprüfen, "gut benehmen sollten", zu etwas führen, das ich auch "Pythonic" nenne
Es gibt also zwei Seiten von Pythonic. Das eine ist syntaktisch, das andere ist die Praxis von. Wie erklärt man die tiefere Seite von "Pythonic"?
In Python ist es keine große Sache, dies zu tun: alist = ['eins', 'zwei', 'drei \ n'] alist.append ((1234, 'Atuple'))
und das Tupel wird ohne Rücksicht auf die Objekttypen zur Liste hinzugefügt. Der Pythonic-Teil ist nicht, dass Sie dies tun KÖNNEN, sondern dass Ihr Code dies ERWARTEN und einfach arbeiten / anpassen sollte.
Was auch immer an dem -alist- -Objekt funktioniert, sollte mit der Idee geschrieben werden, dass ein anderer Codierer hereinkommen und einen Nicht-String zur Liste hinzufügen könnte und dass die Anpassung des Quellcodes durch den neuen Codierer nicht schwierig sein sollte. Das ist doch der Vorteil von ducktype.
quelle
Kaufen Sie ein empfohlenes Buch. Lies es. Es sollte Ihnen eine gute Grundlage für die Verwendung der Sprache und einen Mechanismus bieten, der dem Community-Stil entspricht
quelle