[PYTHON] [Cours supplémentaire] Si __name__ == Si vous écrivez le code sous «__ main__», levez la main.

Bonjour à tous. Si \ _ \ _ nom \ _ \ _ == '\ _ \ _ main \ _ \ _', levez la main si vous écrivez le code paresseusement A dépassé 100 likes, merci. Maître, j'ai quelque chose à dire à tout le monde.

L'horreur du nom des ombres

Tout le monde, l'avertissement «Nom des ombres» est ignoré. Expliquez l'horreur du «nom des ombres» causée par la pollution de la portée globale.

Désolé pour l'exemple délicat, mais supposons que vous ayez le code suivant:

import sys

def process(n):
    x = 0

    # ...Traitement divers

    if x > 1:
        n *= 10

    # ...Traitement divers

    return n


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

Pour une raison quelconque, je n'ai plus besoin de démarrer la fonction de processus, j'ai donc commenté la variable x. Cependant, j'ai négligé la variable «x» qui était enfouie dans le code à l'étape intermédiaire.

def process(n):
    #Commentez ici
    # x = 0

    # ...Traitement divers

    # !!!!J'ai oublié de commenter!!!!
    if x > 1:
        n *= 10

    # ...Traitement divers

    return n

Dans ce cas, «x» est référencé comme une variable globale, donc aucune erreur ne se produit et l'outil d'analyse statique ne la détecte pas.

Des erreurs simples en Python peuvent être détectées par une analyse statique à 99%, mais Shadows name est un vilain bogue qui s'y glisse. Le contournement de l'analyse statique nécessite un grand soin pour commenter une chose.

** Ne rejetez donc pas les spécifications de langage du professeur Python. ** **

Bien sûr, l'exemple précédent était une situation extrême, mais c'est tout à fait possible. Si vous courez le risque de provoquer un bug aussi désagréable, il est plus facile de l'envelopper dans une fonction dès que possible sous ʻif name == '__ main __' `.