Im Vergleich zu Sprachen wie Perl verfügt Python über eine begrenzte Anzahl von Steuerungskonstrukten:
- nur
if
und nein unless
,
- nur,
for
dass über Sequenzen iteriert und keine foreach
oder C-Stil for
,
- nur
while
das prüft eine Bedingung jede Schleife und nein do-while
,
- nur
if-elif
und nein switch
,
- Es gibt nur ein Kommentar-Konstrukt, das
#
, und für jede Zeile können Sie feststellen, ob sie auskommentiert ist oder nicht, ohne vorhergehende Zeilen zu betrachten.
Es gibt auch fast eine Möglichkeit, Ihre Quelle einzurücken. Die meisten Fälle von kreativen Einrückungen werden syntaktisch ausgeschlossen.
Dies erleichtert dem Menschen das Parsen einer Python-Quelle.
Es gibt Versuche, in integrierten Typen und in der Standardbibliothek minimal, aber vollständig zu sein.
- Für veränderbare Listen verwenden Sie den einzigen integrierten
list
Typ. es ist O (1) für die meisten Operationen, und Sie müssen nie die richtige Implementierung wählen,
- für unveränderliche Listen verwenden Sie ebenfalls nur den
tuple
Typ,
- Für Karten verwenden Sie die einzige integrierte Funktion,
dict
die in den meisten Fällen verdammt effizient ist. Sie müssen nicht überlegen, welche Implementierung verwendet werden soll.
Python 3 erweitert dies auf Ganzzahlen: Egal wie groß Ihre Ganzzahl ist, Sie verwenden denselben Typ und kümmern sich nie um Zwang.
Python versucht, syntaktischen Zucker zu vermeiden. Aber manchmal wird syntaktischer Zucker hinzugefügt, um den offensichtlichen Weg zu verdeutlichen. Sie können schreiben, if foo is not None
anstatt zu schreiben, if not (foo is None)
weil "nicht" ein Sonderfall ist. Noch foo is not None
liest leicht, nicht falsch interpretiert werden kann, und Sie müssen nicht denken, schreiben Sie einfach die offensichtliche Sache.
Natürlich, die meisten von komplexeren Dinge in Python kann auf verschiedene Weise erfolgen. Sie können Klassen Methoden durch Deklaration oder durch einfache Zuweisung von Slots hinzufügen, Sie können Argumente auf verschiedene kreative Arten an Funktionen übergeben usw. Dies liegt nur daran, dass die Interna der Sprache meistens offengelegt werden.
Der Schlüssel ist, dass es immer einen Weg gibt, der der beste sein soll, den allumfassenden Fall. Wenn es andere Möglichkeiten gibt, wurden sie nicht als gleichwertige Alternativen hinzugefügt (wie if
und unless
), sondern legen lediglich das Innenleben offen. Langsam aber stetig werden solche Alternativen durch die Verbesserung des bekannten besten Mechanismus überholt (nicht beseitigt!).
Dekorateure schließen AOP-Funktionsaufrufe ab. Vor 2.6 mussten Sie __metaclass__
magic member verwenden, um die Metaklasse einer Klasse zu deklarieren. Jetzt können Sie auch hier die gleiche Decorator-Syntax verwenden. Vor 3.0 hatten Sie zwei Arten von Zeichenfolgen, byteorientiert und Unicode, die Sie versehentlich mischen konnten. Jetzt haben Sie den einzigen Unicode str
und den einzigen binären transparenten Code bytes
, den Sie nicht versehentlich mischen können.
"""
Kommentare (docstrings). Diese erstrecken sich über mehrere Zeilen.__doc__
Attribut zugegriffen werden. Aber Strings ist ein Bereich, in dem Python definitiv viele "richtige Wege" bietet: Verwenden Sie einfache, doppelte oder dreifache Anführungszeichen, verbinden Sie implizit benachbarte Literale, verwenden Sier
für unformatierte Literale usw.Weitere Beispiele sind:
len()
Ist eine Funktion anstelle einer Methode in jeder Sequenz vorhanden? wenn Sie mit Java vergleichen haben Sie.length
,.size()
,.getSize()
, und andere Methoden , um die Anzahl der Elemente in einer Sequenz zu finden.Ein weiteres Beispiel ist die Tatsache, dass
.join()
es sich um einestring
Methode handelt, nicht um eine Methode, die in jeder Sequenz vorhanden ist. Sie müssen nicht wissen, ob der Join-Parameter eine Liste, eine Menge, ein Verständnis oder was auch immer ist, es wird funktionieren.quelle
In C gibt es viele Möglichkeiten, den Wert einer Variablen um eins zu erhöhen:
Jedes erhöht den Wert von
i
um1
, aber jedes ist etwas anders.In Python gibt es wirklich nur einen Weg; füge einfach einen hinzu.
Und während es mehr als eine syntaktisch gültige Möglichkeit gibt, dies zu tun (z. B.
i = i + 1
), tun Sie dasselbe mit denselben Nebenwirkungen.quelle
i = i + 1
handelt es sich um eine Zuweisung, nicht um ein Inkrement. In Python ist ein Inkrementi += 1
. In C-Stil Sprachen können Sie schreibeni++
,++i
undi += 1
.i += 1
, übrigens) liefern genau das gleiche Ergebnis. Ich sehe nur, dass Leute verwirrt sind, wenn sie eine Variable als Teil eines größeren Ausdrucks vor oder nach dem Inkrementieren verwenden. Dies lässt sich normalerweise schnell beheben, indem Sie den entsprechenden Abschnitt der Sprachreferenz lesen. Persönlich hätte ich die Tatsache herausgegriffen, dass man mit beidenstr[4]
oder auf das fünfte Zeichen einer Zeichenfolge verweisen kann*(str+4)
, aber vielleicht war das zu einfach ...max(i++, ++i)
können nicht schnell behoben werden. C hat viele "undefinierte" und "implementierungsabhängige" Verhaltensfälle, alle aus gutem Grund - aber jeder kann eine Falle schaffen.Eine andere Möglichkeit könnten Listenverständnisse sein. In Python können Sie dies tun:
Aber der "naheliegende" Weg (wenn Sie Holländer sind oder mit Python besser vertraut sind), dies zu tun, wäre ein Listenverständnis:
Es ist kürzer, die new_list wird in einem Schritt erstellt, läuft meiner Meinung nach schneller und ist elegant. Auf der anderen Seite könnte man argumentieren, dass es sich weniger explizit anfühlt, aber ich denke, wenn man sich erst einmal daran gewöhnt hat, ist es genauso explizit.
quelle