Achten Sie auf den Umfang der Variablen in der for-Schleife

高洛峰
Freigeben: 2016-10-18 09:16:47
Original
1859 Leute haben es durchsucht

for e in collections:
    pass
Nach dem Login kopieren

In der for-Schleife existiert das letzte Objekt e immer im Kontext. Auch außerhalb der Schleife ist der nachfolgende Verweis auf e weiterhin gültig.

Hier liegt ein Problem vor, das leicht übersehen wird. Wenn vor der Schleife bereits ein Objekt mit demselben Namen vorhanden ist, wird dieses Objekt überschrieben.

Wenn Sie sich in einer Code-fähigen IDE befinden, fordert die IDE dazu auf, dass die Variable „neu deklariert“ wird, aber zur Laufzeit tritt kein Fehler auf.

Die for-Schleife ist kein Abschluss. Sie können das Modul dis verwenden, um den folgenden Code zu zerlegen, wie Sie sehen können:

x = 5
for x in range(10):
    pass
print x
Nach dem Login kopieren

Speichern Sie den Code im test.py-Datei und führen Sie python - m dis test.py


C:UsersPatrickDesktop>python -m dis test.py

1         0 LOAD_CONST           0 ( 5)

3 Store_Name 9 Load_Name 1 (Bereich)

12 Load_Const 1 10

4 25 sprung_absolute 19

>> 28 POP_BLOCK

6 >> 29 LOAD_NAME 0 (x)

32 PRINT_ITEM

33 PRINT_NEWLINE

34 LOAD_CONST 2 (Keine)

37 RETURN_VALUE

In anderen Sprachen sind die initialisierten Variablen der for-Schleife auch für den Kontext sichtbar, z. B. Java, da es sich bei Java um eine stark typisierte Sprache handelt. Wenn Sie eine vorhandene Variable deklarieren, gibt die IDE einen Fehler aus. Dies unterscheidet sich natürlich von der Kompilierung.

Normalerweise liegt bei der Python-Programmierung (wahrscheinlich den meisten dynamischen Sprachen) manchmal kein offensichtlicher Fehler im Programm vor, selbst wenn eine Variable mit demselben Namen deklariert wird, aber sobald ein Fehler auftritt, ist es schwierig, ihn zu finden Fehler. Vermeiden Sie daher, denselben Namen wie die Variable in der for-Schleife zu verwenden.


Dies gilt insbesondere beim Codieren mit der Python-Vorlagensprache. Der Code-Editor verfügt über keine Eingabeaufforderungen und findet nicht heraus, wo der Fehler liegt. Dies ist ein äußerst seltsames Beispiel, das mir begegnet ist. Warum sagen Sie seltsam, weil es kein logisches Problem gibt?

Wenn der Handler in einer Seitenvorlage diese Vorlage aufruft, werden zwei Objekte gleichzeitig übergeben (vom Handler verwende ich Tornado), ein Seitenobjekt und eine Seitenliste. Meine Bestellung lautet wie folgt:

{{ page.name if page else ''}}

Übergeordnete Seite

>                                                                                                                            🎜> 

Hier liegt das Problem, beim Betrieb ist ein Fehler aufgetreten, und die Eingabeaufforderung ist die Fehlerseite, auf die in

{{ page.name if page else ''}}

vor der Zuweisung verwiesen wird.

Während des Vorlagenaufrufvorgangs wird die Vorlagensprache auch in Python-Bytecode übersetzt und Zeile für Zeile analysiert und ausgegeben, daher weiß ich überhaupt nicht, ob es sich um einen Fehler im Tornado handelt Vorlagensprache.

Achten Sie also auf die Variablennamen.

Kurz gesagt, ich denke, dass die Ausnahmeverfolgung von Tornado sehr unfreundlich ist.

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!