Warum will Python nicht, dass ich einen anderen lokalen Variablennamen als einen globalen Namen zum selben Zweck verwende?

8

Gegebener Python-Code wie

%Vor%

pyllt beschwert sich

%Vor%

Was ist der pythonische Weg, um das Obige zu schreiben? Verwenden Sie eine andere Variable lokal, sagen wir j ?

Aber warum, wenn die Variable in beiden Fällen genau gleich ist ( i für Index). Nehmen wir an, ich ändere alle lokalen Indizes in j und später finde ich, dass ich j als zweiten Index im glokalen Bereich verwenden möchte. Muss sich nochmal ändern?

Ich kann Flusenwarnungen nicht deaktivieren, ich möchte sie nicht haben, ich möchte Pythonic schreiben, und dennoch möchte ich denselben Namen für das gleiche Ding verwenden, im einfachen Fall wie oben. Ist das nicht möglich?

    
Mark Galeck 01.08.2014, 02:48
quelle

3 Antworten

0

Der linter warnt, weil i nach der Schleife weiterlebt, wenn es mindestens einmal gelaufen ist. Das heißt, wenn Sie es ohne Neuinitialisierung verwenden würden, hätte es immer noch den Wert, den es während der letzten Iteration der Schleife hatte.

Die Art, wie Sie es verwenden, ist in Ordnung, da i immer neu initialisiert wird.

Eine nützliche Übung könnte darin bestehen, alle Werte im äußeren Bereich in ALL_CAPS zu benennen. Auf diese Weise konnten keine Fehler gemacht werden.

    
OlivierLi 01.08.2014, 02:50
quelle
25

Sie können globale Variablenkonflikte vermeiden, indem Sie keine globalen Variablen haben:

%Vor%

Jeder Code, der zur Modul-Init-Zeit ausgeführt werden muss, kann in eine einzige Funktion eingefügt werden. Dies bleibt als der einzige ausführbare Code, der während der Modulinitialisierung ausgeführt wird: def -Anweisungen, class -Anweisungen und ein Funktionsaufruf.

Ähnlich, wenn Ihr Code nicht import ed ist, sondern ein Skript, das ausgeführt werden soll,

%Vor%     
Robᵩ 01.08.2014 02:56
quelle
1

Weil es das Risiko eliminiert, eines zu benutzen, wenn Sie glauben, dass Sie das andere benutzen. Lint-Tools machen Ihren Code robuster. Wenn Sie alle Variablen mit unterschiedlichen Namen verwenden, stellen Sie sicher, dass kein solcher Konflikt auftritt.

Dies ist besonders kritisch in der interpretierten Sprache, da die Fehler nicht zur "Kompilierzeit" überprüft werden. Ich hatte einmal das Problem, dass der zweite Aufruf einer Funktion mir einen Fehler gab, weil ich eine Funktion umbenannte und mir nicht bewusst wurde, dass es in einigen Fällen eine Variable gab, die mit dem gleichen Namen wie meine Funktion erstellt wurde, und so, Als ich versuchte, meine Funktion aufzurufen, versuchte der Interpreter, meine neu erstellte Variable zu "rufen", die XD nie funktionierte.

Diese Richtlinie wird diese Art von Problem vermeiden.

Hier ist ein Beispielcode (dies ist ein Programm zur Berechnung von Pi):

%Vor%

In diesem Fall habe ich eine Variable von einem Generator initialisiert, und der Generator hat eine andere Funktion verwendet, die mit meinem Variablennamen kollidierte, nachdem er von meinem Generator initialisiert wurde. Nun, es ist kein sehr gutes Beispiel, weil hier beide Namen global sind, aber von seiner Struktur her war es nicht sofort offensichtlich, dass es passieren würde.

Mein Punkt ist, dass selbst wenn Sie wissen, wie man programmiert, Sie Fehler machen, und diese Praktiken werden dazu beitragen, die Risiken für diejenigen zu reduzieren, die verborgen bleiben.

    
Camion 09.12.2017 19:28
quelle

Tags und Links