Ich sehe, dass es möglich ist, eine Variable innerhalb eines Bereichs zu definieren, sich dann aber außerhalb dieses Bereichs zu beziehen. Zum Beispiel funktioniert der folgende Code:
%Vor%Das erscheint mir jedoch ein bisschen komisch. Wenn Sie dies in C versuchen würden, wäre die Variable X nicht richtig definiert:
%Vor%Die Lösung, in C sowieso, ist X zuerst zu erklären, dann herausfinden, was damit zu tun:
%Vor%Also, in Python ist mein Instinkt, Code wie folgt zu schreiben:
%Vor%Allerdings ist mir klar, dass Python dies nicht verlangt. Irgendwelche Vorschläge? Gibt es für dieses Szenario eine Stilrichtlinie?
Blöcke erstellen keinen neuen Bereich in Python. Module, Klassen und Funktionen tun dies.
Auch:
%Vor%oder:
%Vor%In Ihrem Beispiel könnten Sie Folgendes versuchen:
%Vor% Warum Python nicht dieselben Scoping-Regeln wie C (und C ++ und Java) hat, lautet die kurze Antwort, dass es sich um verschiedene Sprachen handelt. Die lange Antwort hat mit Effizienz zu tun. In C werden diese Scoping-Regeln alle zur Kompilierungszeit behandelt, es gibt keinen Laufzeit-Overhead. In Python müsste es einen inneren Bereich in einem neuen dict
speichern, und das würde zusätzlichen Aufwand verursachen. Ich bin mir sicher, dass es andere Gründe gibt, aber das ist ein großer praktischer.
Sie erstellen keinen neuen Bereich, daher gibt es kein Problem mit der Bereichsdefinition.
Beachten Sie jedoch, dass wenn Sie etwas tun wie:
%Vor% Sie erhalten einen NameError, der ausgelöst wird, wenn foo
False ist. Sie könnten also auf einen Fall stoßen, bei dem Sie Ihre Variable außerhalb der Bedingung definieren möchten (oder eine else
hinzufügen, um sie zuzuweisen None
.)
Tags und Links python