2012-01-06 54 views
0

當我導入main.py而不是運行它時,獲取此代碼塊的最佳方式是什麼?在python中,我如何獲得與__name__ =='__main__'相同的行爲:

#main.py 
if __name__ == '__main__': 
    #Do something interesting. 


#Do something to have the interesting code run after importing the file. 
import main.py 
main.__main__() # wrong of course. 
+0

爲什麼不直接在程序的主要部分定義'有趣的代碼'的函數呢? – si28719e 2012-01-06 08:44:10

+0

[運行模塊時如何使__name__ =='__main__'可能重複](http://stackoverflow.com/questions/6114251/how-to-make-name-main-when-running-module) – 2012-01-06 08:49:13

回答

10

將該代碼放入函數中,並在if中調用它。

def main(): 
    # ... 

if __name__ == '__main__': 
    main() 

或根本不使用if

0

假設你要做到這一點,而無需修改main.py模塊(讓「貓加上加」的回答不適用):

您直接不能; __name__是隻讀的。

但是,你可以做到這一點間接地與execfile('main.py') - :(編輯這不是實際上是相當真實的,因爲你可以使用imp模塊加載文件時明確指定它看到How to make __name__ == '__main__' when running module第一個答案。)。

1

你是在找那個嗎?

#main.py 
if __name__ == '__main__': 
    # Do something interesting when running main.py directly 
    pass 
else: 
    # Do something when the script in imported 
    pass 
2

你甚至都不需要,因爲模塊的代碼來檢查任何進口首次作爲初始化的一部分,當被執行。特別地,根據本documentation

模塊可以包含可執行語句以及函數定義。這些陳述旨在初始化模塊。它們僅在第一次將模塊導入某處時執行。

如果你需要的是當模塊導入要執行一些代碼,而不是當模塊執行,然後從安東尼斗篷,腦袋挺大的反應應該是去(當然了,你也可以查看直接編號爲if __name__ != '__main__')。

相關問題