python中def main是什么意思_关于python:为什么使用def main()?
本問題已經有最佳答案,請猛點這里訪問。
Possible Duplicate:
What does if __name__=="__main__" do?
我看過一些代碼示例和教程
1
2
3
4
5def main():
# my code here
if __name__ =="__main__":
main()
但是為什么呢?有沒有什么理由不在文件的頂部定義函數,然后在下面寫代碼?工業工程
1
2
3
4
5
6
7
8
9def my_function()
# my code here
def my_function_two()
# my code here
# some code
# call function
# print(something)
我只是想知道主旋律有沒有押韻?
請參閱stackoverflow.com/questions/419163/what-do-if-name-main-do
stackoverflow.com/questions/419163/what-do-if-name-main-do無法回答整個問題。
所謂的副本并沒有回答:擁有一個main()函數(而不是僅僅將所有代碼寫入"if name"塊)是有用的,因為它可以避免意外地創建可能影響其他函數的全局變量。
以及其他答案,有一個執行代碼的入口點可以使用setup.py中的入口點自動生成可執行腳本,這些腳本包裝導入和執行步驟。當你希望你的用戶能夠寫setup-my-app ...而不是python2.7 /opaque/path/to/module.py ...時,這是很好的。
如果沒有主sentinel,即使腳本作為模塊導入,也會執行代碼。
同樣值得注意的是,擁有一個main()函數可以使用:import module; module.main()運行該代碼。如果代碼只是在if塊中,則無法從其他地方運行。
其他人都已經回答過了,但我想我還有別的事要補充。
調用main()的if語句(無特殊順序)的原因:
其他語言(如C語言和Java語言)有一個EDOCX1×7函數,它在執行程序時被調用。使用這個if,我們可以使python的行為像它們一樣,這讓許多人覺得更熟悉。
代碼將更干凈、更容易閱讀和更具組織性。(是的,我知道這是主觀的)
對于import來說,將python代碼作為一個模塊是可能的,不會產生不良的副作用。
這意味著可以對該代碼運行測試。
這意味著我們可以將該代碼導入到交互式Python shell中,并測試/調試/運行它。
def main中的變量是局部變量,而它之外的變量是全局變量。這可能會引入一些錯誤和意外行為。
但是,不需要編寫main()函數并在if語句中調用它。
我自己通常開始寫一些沒有任何功能的廢棄腳本。如果腳本變得足夠大,或者如果我覺得將所有代碼放在函數中對我有利,那么我重構代碼并執行它。當我編寫bash腳本時,也會發生這種情況。
即使您將代碼放在主函數中,也不需要完全按此方式編寫代碼。一個簡單的變化可能是:
1
2
3
4
5
6
7
8import sys
def main(argv):
# My code here
pass
if __name__ =="__main__":
main(sys.argv)
這意味著您可以從傳遞自定義參數的其他腳本(或交互shell)調用main()。這可能在單元測試或批處理時很有用。但請記住,上面的代碼將需要解析argv,因此最好使用傳遞已解析參數的不同調用。
在我編寫的面向對象應用程序中,代碼如下所示:
1
2
3
4
5
6class MyApplication(something):
# My code here
if __name__ =="__main__":
app = MyApplication()
app.run()
因此,請隨意編寫更適合您的代碼。:)
使用sys.argv作為參數調用main的一個好處是,這種方法與argparse模塊(imo是處理命令行參數的正確方法)很好地工作。你所需要做的就是在main中把argv傳給parse_args。
如果foo.py的內容
1
2
3print __name__
if __name__ == '__main__':
print 'XXXX'
文件foo.py可以通過兩種方式使用。
imported in another file : import foo
在這種情況下,__name__為foo,代碼段不執行,不打印XXXX。
executed directly : python foo.py
直接執行時,__name__與__main__相同,執行該段代碼并打印XXXX。
使用此功能在同一模塊中編寫各種單元測試的一種。
"if __name__=="__main__":是做什么的?"已經回答。
如果您使用import模塊,那么擁有main()功能允許您調用它的功能。這個(imho)的主要(沒有雙關語)好處是您可以對它進行單元測試。
兩個答案相同的問題不會重復。
@布巴卡佐巴:我同意。我沒有將這個問題標記為副本。這個問題的一部分有一個很好的答案,我認為復制答案毫無意義。我回答了剩下的問題。
考慮第二個腳本。如果您將其導入到另一個目錄中,那么將執行"全局級"的指令。
總結
以上是生活随笔為你收集整理的python中def main是什么意思_关于python:为什么使用def main()?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: extjs中store获取后台数据_Ex
- 下一篇: python计算熵