每當Python解釋器讀取源文件時,它都會做兩件事:
假設代碼在一個叫做foo.py的文件中。
print("beforeimport")
importmath
print("beforefunctionA")
deffunctionA():
print("FunctionA")
print("beforefunctionB")
deffunctionB():
print("FunctionB{}".format(math.sqrt(100)))
print("before__name__guard")
if__name__=='__main__':
functionA()
functionB()
print("after__name__guard")
當Python解釋器讀取源文件時,它首先會定義一些特殊的變量。比如__name__雖然它長得很奇怪,前面和後面都有一個下劃線_,但是記得變量命名的規則嘛?下劃線_是可以出現在變量首字母的。所以,__name__仍然是一個變量,隻不過,是解釋器自己定義的。
2.1 作為主程序運行當我們在命令行中使用python foo.py,或者直接在ide(比如pycharm)圖形界面裡點運行foo.py,那麼這時候,foo.py就是作為主程序運行的。
此時: Python解釋器會直接給_name_變量賦值為"_main_"
2.2 作為導入的模塊運行如果有另一個程序,叫main.py,它裡面的代碼是這樣的。
importfoo
那麼如果我們在命令行中使用python main.py,則main.py作為主程序運行,而foo.py就是導入的模塊。
此時: Python解釋器會令__name__ = "foo"
2.3 執行模塊的代碼如果使用主程序運行!python foo.py: 輸出如下:
beforeimport
beforefunctionA
beforefunctionB
before__name__guard
FunctionA
FunctionB10.0
after__name__guard
如果使用主程序運行import foo: 輸出如下:
beforeimport
beforefunctionA
beforefunctionB
before__name__guard
after__name__guard
可以明顯看到,當使用主程序運行import foo時,沒有執行下面語句的内容,因為此時__name__ = 'foo'
if__name__=='__main__':
functionA()
functionB()
有時我們想編寫一個.py文件,該文件既可以被其他程序和模塊導入,也可以作為主程序運行。 例子如下:
所以,其實就是有的時候希望他在被導入的時候運行一些代碼,有的時候希望他作為主程序的時候運行另一些代碼。所以需要進行判斷。
,
更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!