前面說了,py文件分兩種:用于執(zhí)行的程序文件和用于導入的模塊文件。當直接使用pythona.py的時候表示a.py是用于執(zhí)行的程序文件,通過import/from方式導入的py文件是模塊文件。
__name__屬性用來區(qū)分py文件是程序文件還是模塊文件:
當文件是程序文件的時候,該屬性被設(shè)置為__main__
當文件是模塊文件的時候(也就是被導入時),該屬性被設(shè)置為自身模塊名
換句話說,__main__表示的是當前執(zhí)行程序文件的默認模塊名,想必學過其他支持包功能的語言的人很容易理解:程序都需要一個入口,入口程序所在的包就是main包,在main包中導入其它包來組織整個程序。python也是如此,只不過它是隱式自動設(shè)置的。
對于python來說,因為隱式自動設(shè)置,該屬性就有了特殊妙用:直接在模塊文件中通過if__name__=="__main__"來判斷,然后寫屬于執(zhí)行程序的代碼,如果直接用python執(zhí)行這個文件,說明這個文件是程序文件,于是會執(zhí)行屬于if代碼塊的代碼,如果是被導入,則是模塊文件,if代碼塊中的代碼不會被執(zhí)行。
顯然,這是python中非常方便的單元測試方式。
例如,寫一個模塊文件,里面包含一個函數(shù),用來求給定序列的最大值和最小值:
defminmax(func,*args):
res=args[0]
forarginargs[1:]:
iffunc(arg,res):
res=arg
returnres
deflessthan(x,y):returnx defgreatethan(x,y):returnx>y #測試代碼 if__name__=="__main__": print(minmax(lessthan,3,6,2,1,4,5)) print(minmax(greatethan,3,6,2,1,4,5)) 以上內(nèi)容為大家介紹了Python之有妙用的__name__屬性,希望對大家有所幫助,如果想要了解更多Python相關(guān)知識,請關(guān)注IT培訓機構(gòu):千鋒教育。