學(xué)習(xí)的python教程是Python-100-Days
在學(xué)習(xí)第6課“函數(shù)與模塊的使用”時(shí)遇到了這樣一道例題:
# module3.py
def foo():
????pass
def bar():
????pass
# __name__是Python中一個(gè)隱含的變量它代表了模塊的名字
# 只有被Python解釋器直接執(zhí)行的模塊的名字才是__main__
if __name__ == '__main__':
????print('call foo()')
????foo()
????print('call bar()')
????bar()
其中if __name__ == '__main__':并沒(méi)有解釋的很清楚(好的這下大家都知道我是純粹的小白了)
這里查了一些資料,下面是我自己的理解:
if __name__ == '__main__':
__name__是python隱含的一個(gè)變量,它會(huì)根據(jù)實(shí)際情況被賦予不同的值。在這個(gè)例子中,如果直接運(yùn)行這段代碼(也就是說(shuō)把這段代碼作為主程序來(lái)運(yùn)行),這時(shí)__name__會(huì)被賦新值‘__main__’,這樣一來(lái) if條件為真,執(zhí)行接下來(lái)的語(yǔ)句。如果用另一個(gè)程序調(diào)用module3(這段代碼的名稱是module3.py),那么__name__會(huì)被賦值為module3,‘module3’ 不等于‘__main__’,if條件為假,不執(zhí)行接下來(lái)的程序。

問(wèn)題是為什么要有這樣一個(gè)判斷語(yǔ)句?
因?yàn)閜ython在調(diào)用一個(gè)函數(shù)的時(shí)候,會(huì)直接運(yùn)行里面所有的代碼。舉個(gè)例子,我們?cè)趯?xiě)函數(shù)的時(shí)候?yàn)榱薲ebug會(huì)寫(xiě)一堆print(),但是在正式調(diào)用的時(shí)候不希望這些print輸出,那我們就可以把這些print()寫(xiě)進(jìn)if判斷里。
關(guān)于這條代碼的解釋,我主要參考了stackOverflow上的回答:What does if __name__ == “__main__”: do?