[PYTHON] [Ergänzungskurs] Wenn __name__ == Wenn Sie den Code unter '__ main__' schreiben, heben Sie Ihre Hand.

Hallo zusammen. Wenn \ _ \ _ name \ _ \ _ == '\ _ \ _ main \ _ \ _', heben Sie Ihre Hand, die den Code träge schreibt Hat 100 Likes überschritten, danke. Lehrer, ich habe jedem etwas zu erzählen.

Der Schrecken des Namens Shadows

Jeder, die Warnung "Shadows name" wird übersehen. Erklären Sie den Schrecken von "Shadows name", der durch die Verschmutzung des globalen Bereichs verursacht wird.

Entschuldigen Sie das knifflige Beispiel, aber nehmen Sie an, Sie haben den folgenden Code:

import sys

def process(n):
    x = 0

    # ...Verschiedene Verarbeitung

    if x > 1:
        n *= 10

    # ...Verschiedene Verarbeitung

    return n


if __name__ == '__main__':
    for x in sys.argv[1:] or [1, 2, 3]:
        process(int(x))

Aus irgendeinem Grund muss ich die Prozessfunktion nicht mehr starten, daher habe ich die Variable "x" auskommentiert. Ich habe jedoch die Variable "x" übersehen, die in der mittleren Phase im Code vergraben war.

def process(n):
    #Kommentar hier raus
    # x = 0

    # ...Verschiedene Verarbeitung

    # !!!!Ich habe vergessen, einen Kommentar abzugeben!!!!
    if x > 1:
        n *= 10

    # ...Verschiedene Verarbeitung

    return n

In diesem Fall wird "x" als globale Variable referenziert, sodass kein Fehler auftritt und von statischen Analysewerkzeugen nicht erkannt wird.

Einfache Fehler in Python können durch eine statische Analyse von 99% erkannt werden, aber "Shadows name" ist ein böser Fehler, der durch ihn hindurchschlüpft. Wenn Sie die statische Analyse umgehen, müssen Sie auch nur einen Kommentar genau beachten.

** Entlassen Sie also nicht die Sprachspezifikationen des Python-Lehrers. ** **.

Natürlich war das vorherige Beispiel eine extreme Situation, aber es ist durchaus möglich. Wenn Sie das Risiko eingehen, einen solchen lästigen Fehler zu verursachen, ist es einfacher, das unter "if name ==" __ main __ "so schnell wie möglich in eine Funktion einzubinden.