Python, kui __name__ == __main__ on selgitatud koodinäidetega

Kui Pythoni tõlk loeb Pythoni faili, määrab ta kõigepealt mõne erimuutuja. Seejärel käivitab faili koodi.

Ühte neist muutujatest nimetatakse __name__.

Kui järgite seda artiklit samm-sammult ja loete selle koodilõike, saate teada, kuidas seda kasutada if __name__ == "__main__"ja miks see nii oluline on.

Pythoni moodulid on selgitatud

Pythoni faile nimetatakse mooduliteks ja need tuvastatakse .pyfaililaiendi järgi. Moodul võib määratleda funktsioonid, klassid ja muutujad.

Nii et kui tõlk töötab moodulit, määratakse __name__muutuja nii, nagu   __main__oleks käivitatav moodul peamine programm.

Kuid kui kood impordib moodulit teisest moodulist, määratakse __name__  muutuja sellele moodulile.

Vaatame ühte näidet. Looge Pythoni moodul nimega file_one.pyja kleepige see ülemise taseme kood:

# Python file one module print("File one __name__ is set to: {}" .format(__name__))

Selle faili käivitamisel näete täpselt, millest me rääkisime. __name__Selle mooduli muutujaks on määratud __main__:

File one __name__ is set to: __main__

Nüüd lisage teine ​​fail nimega file_two.pyja kleepige see kood sisse:

# Python module to import print("File two __name__ is set to: {}" .format(__name__)) 

Samuti muutke koodi file_one.pyselliselt, et impordiksime file_twomooduli:

# Python module to execute import file_two print("File one __name__ is set to: {}" .format(__name__)) 

Meie file_onekoodi uuesti käivitamine näitab, et __name__muutuja file_onemuutumises ei muutunud ja jääb endiselt väärtuseks __main__. Kuid nüüd määratakse muutuja __name__in file_twoselle mooduli nimeks, seega file_two.

Tulemus peaks välja nägema selline:

File two __name__ is set to: file_two File one __name__ is set to: __main__ 

Kuid käivitage file_twootse ja näete, et selle nimi on määratud __main__:

File two __name__ is set to: __main__ 

__name__Käivitatava faili / mooduli muutuja on alati __main__. Kuid __name__kõigi teiste imporditavate moodulite muutuja määratakse nende mooduli nimele.

Pythoni failide nimetamise kokkulepped

Tavaline kasutusviis __name__ja __main__näeb välja selline:

if __name__ == "__main__": Do something here 

Vaatame, kuidas see päriselus töötab ja kuidas neid muutujaid tegelikult kasutada.

Muutke file_oneja file_twonägi välja selline:

file_one:

# Python module to execute import file_two print("File one __name__ is set to: {}" .format(__name__)) if __name__ == "__main__": print("File one executed when ran directly") else: print("File one executed when imported") 

file_two:

# Python module to import print("File two __name__ is set to: {}" .format(__name__)) if __name__ == "__main__": print("File two executed when ran directly") else: print("File two executed when imported") 

Jällegi file_onenäete käivitamisel , et programm tunnistas, milline neist kahest moodulist on, __main__ja käivitas koodi vastavalt meie esimestele if elselausetele.

Tulemus peaks välja nägema selline:

File two __name__ is set to: file_two File two executed when imported File one __name__ is set to: __main__ File one executed when ran directly 

Nüüd käivitage file_twoja näete, et __name__muutujaks on määratud __main__:

File two __name__ is set to: __main__ File two executed when ran directly 

Selliste moodulite importimisel ja käitamisel imporditakse nende funktsioonid ja täidetakse tipptasemel kood.

Selle protsessi toimimiseks nägemiseks muutke oma faile järgmiselt:

file_one:

# Python module to execute import file_two print("File one __name__ is set to: {}" .format(__name__)) def function_one(): print("Function one is executed") def function_two(): print("Function two is executed") if __name__ == "__main__": print("File one executed when ran directly") else: print("File one executed when imported") 

file_two:

# Python module to import print("File two __name__ is set to: {}" .format(__name__)) def function_three(): print("Function three is executed") if __name__ == "__main__": print("File two executed when ran directly") else: print("File two executed when imported") 

Nüüd on funktsioonid laaditud, kuid neid ei käivitata.

Ühe nimetatud funktsiooni käivitamiseks muutke selle if __name__ == "__main__"osa file_onevälja selline:

if __name__ == "__main__": print("File one executed when ran directly") function_two() else: print("File one executed when imported") 

Jooksmisel file_onepeaksite nägema, et see peaks olema selline:

File two __name__ is set to: file_two File two executed when imported File one __name__ is set to: __main__ File one executed when ran directly Function two is executed 

Samuti saate funktsioone käivitada imporditud failidest. Selleks muutke selle if __name__ == “__main__”osa file_onevälimust järgmiselt:

if __name__ == "__main__": print("File one executed when ran directly") function_two() file_two.function_three() else: print("File one executed when imported") 

Ja võite oodata sellist tulemust:

File two __name__ is set to: file_two File two executed when imported File one __name__ is set to: __main__ File one executed when ran directly Function two is executed Function three is executed 

Oletame nüüd, et file_twomoodul on tõesti suur, paljude funktsioonidega (meie puhul kaks) ja te ei soovi neid kõiki importida. Muutke nii, file_twoet see näeks välja järgmine:

# Python module to import print("File two __name__ is set to: {}" .format(__name__)) def function_three(): print("Function three is executed") def function_four(): print("Function four is executed") if __name__ == "__main__": print("File two executed when ran directly") else: print("File two executed when imported") 

And to import the specific functions from the module, use the from import block in the file_one file:

# Python module to execute from file_two import function_three print("File one __name__ is set to: {}" .format(__name__)) def function_one(): print("Function one is executed") def function_two(): print("Function two is executed") if __name__ == "__main__": print("File one executed when ran directly") function_two() function_three() else: print("File one executed when imported")

Conclusion

There is a really nice use case for the __name__ variable, whether you want a file that can be run as the main program or imported by other modules. We can use an if __name__ == "__main__" block to allow or prevent parts of code from being run when the modules are imported.

When the Python interpreter reads a file, the __name__ variable is set as __main__ if the module being run, or as the module's name if it is imported. Reading the file executes all top level code, but not functions and classes (since they will only get imported).

Bra gjort! (That means "Well done" in Swedish!)

Vaadake veel selliseid artikleid oma freeCodeCampi profiilil, keskmisel profiilil ja muul lõbusal värvil, mille ma oma GitHubi lehele ehitan.