Als Benutzer (und nicht als Designer) von Python gibt es drei Gründe, warum ich mit diesen Entscheidungen zufrieden bin:
Hauptsächlich liest es sich besser. Natürlich muss ich mich bewusst dafür entscheiden, beim Schreiben eine neue Variable einzuführen , aber Code wird weitaus häufiger gelesen als geschrieben. Viel Code ist einfach in dem Sinne, dass Kontrollfluss und Verschachtelung keinen Einfluss auf die Bedeutung und Existenz von Variablen haben. Wenn ich lese
it = Snark()
message = "A letter, not signed"
if random.random() > 0.5:
hunt(it)
message += " (by the Knave)"
return [it, message]
dann ist es mir normalerweise egal, welche (wenn überhaupt) Erwähnung eines Namens ihn zuerst einführt, es ist mir nur wichtig, dass er da ist und was damit passiert.
Beachten Sie, dass ein signifikanter Teil des Pseudocodes dieselbe Konvention verwendet (keine Deklaration, implizite Einführung durch Zuweisung) und Python häufig nur halb im Scherz als ausführbarer Pseudocode beschrieben wird. Vier zusätzliche Zeichen für jede lokale Variable fühlen sich für meine verwöhnten Augen im Kontext von Python wie eine erhebliche Unordnung an, insbesondere wenn es sich nicht so anfühlt, als würde es einen Mehrwert bringen (siehe unten). Dies würde von einem :=
Bediener wie in Go verringert .
Zweitens bin ich noch nicht auf einen Tippfehler gestoßen (aufgrund dieser speziellen Funktion), der sich auch nicht auf eine andere klare Weise gezeigt hat. Vielleicht werde ich es mir in ein paar Jahren anders überlegen, wenn ich auf solche Fehler gestoßen bin, aber bis jetzt ist es ganz unten auf meiner Liste der Dinge, die Fehler verursachen. Es gibt eine ganze Reihe von Fragen zu UnboundLocalError
und es ist etwas schwierig, Anfängern zu erklären, aber die Häufigkeit und Beliebtheit dieser Fragen im Vergleich zu anderen Fallstricken (veränderbare Standardparameter, Referenzsemantik, Klassen- und Instanzvariablen) zeigt, dass es sich um ein seltenes Problem handelt.
Endlich die Absichtssache ... Entschuldigung, aber ich kann diese nicht wirklich verstehen. Beim Lesen und Schreiben von Python ist immer klar: Was Sie zuweisen, ist als lokal gedacht, sofern nicht laut und ausdrücklich etwas anderes erklärt wird. Keine Frage. Da (zumindest in Python) eine Variable entweder für die gesamte Funktion lokal oder überhaupt nicht ist , können Sie keinen kniffligen Code haben, der eine lokale Variable in einem Zweig und eine globale in einem anderen verwendet. Sie sehen einen Namen zugewiesen? Sie wissen sofort, dass es von Anfang an immer lokal war. Nun, es sei denn, der Code ist auf eine ganz besondere Weise gebrochen (und wirft den gefürchteten UnboundLocalError
zur Laufzeit, wenn Sie diese Fälle eingeben ).