我正在創建一個Python模塊mymodule.py
,我需要在導入時運行一個函數。該功能不應該由用戶運行,只需要正確啓動模塊。Python模塊中是否有C的main()等價物?
因爲它是一個模塊,這是不行的:
if __name__ == '__main__':
_main()
我想跟進PEPs和我只是想知道如果有C'S main()的一個Python模塊中的等價?
...或者如果我應該只是寫入初始化代碼(不作爲函數),或者內聯調用函數。
我正在創建一個Python模塊mymodule.py
,我需要在導入時運行一個函數。該功能不應該由用戶運行,只需要正確啓動模塊。Python模塊中是否有C的main()等價物?
因爲它是一個模塊,這是不行的:
if __name__ == '__main__':
_main()
我想跟進PEPs和我只是想知道如果有C'S main()的一個Python模塊中的等價?
...或者如果我應該只是寫入初始化代碼(不作爲函數),或者內聯調用函數。
呀有這樣一個頂級功能就像是一個主要的,是這樣的:
def interact():
# Your code which handles all the rest of the functions
# For example
print('Welcome to this program!')
filename = input('Please enter the data source file: ')
load_data(filename)
......
然後在腳本的底部,你在做什麼:
if __name__ == '__main__':
interact()
如果要導入其他文件到程序,如
mymodule.py
,只是這樣做:
from mymodule import *
或者,你可以測試函數出這樣的:
if __name__ == "__main__":
print test_the_function(123, 456)
當mymodule
是進口的,代碼像以前一樣運行,但是,當我們得到的if語句,巨蟒看起來看到什麼名字模塊有。由於模塊是導入的,我們通過導入它時使用的名稱知道它,所以__name__
是mymodule
。因此,打印語句永遠不會到達。
python的美麗之處在於它不像Cs main()那樣工作。你剛剛開始輸入,並且你已經編寫了你的第一個程序。 Python的簡單性使它變得如此美麗,我不會試圖與C進行比較,它不會起作用。
您還可以檢查這個網站了,如果有關於蟒蛇主(一些有用的信息):
是的,但OP希望即使在導入時也能調用該函數。我們導入模塊時這不起作用。 – formatkaka
是的,如果沒有看到OP的代碼,很難知道問題是什麼。 – RoadRunner
認真,冷靜,你們是無情的。 – RoadRunner
運行在進口功能並不等同於C'S main()
。 C的main()
在執行程序時運行。
當導入模塊時,會執行頂級(即不在函數中)的Python模塊中的所有內容。例如,如果這是你的模塊內容:
def _on_import():
pass # do something
_on_import()
然後_on_import()
導入模塊時執行。
當你的模塊看起來是這樣的:
def main():
pass # do something
if __name__ == '__main__':
main()
然後main()
運行Python模塊作爲腳本執行時(例如,如果你的模塊文件foo.py
和運行python foo.py
)。這基本上相當於C的main()
。
爲什麼不編寫內聯代碼片段,因爲內聯代碼片段將在導入時處理? – gevorg
調用它時出現了什麼問題*不管if __name__ =='__main __''是什麼?那不是PEP友好的?它在某些情況下沒有做到你想要的嗎? –
「在導入時運行函數」和C的main()不等效。 –