python調用main
⑴ def main()什麼意思
def main是python語言中的一種函數定義方式,用於表示程序的入口點。
1.def main的作用
def main函數用於在Python腳本中定義一個入口點,從而使腳本能夠被其他模塊調用和執行。在函數內部,可以編寫執行程序所需的爛緩遲代碼。直接運行腳本時,def main()函數會被自動調用。
5.使用argparse模塊解析命令行參數
如果需要在Python腳本中解析命令行參數,則可以使用argparse模塊來實現。通過argparse.parse_args()函數可以將命令行參數解析成指定格式或變數,並可作為參數傳遞給def main()函數。
6.tips
在Python中,函數不一定都需要定義為def main()。可以將一些公共方法提取出來,形成一個python模塊文件。其餘腳本文件中,則可以利用import引入該模塊,來使用一些已經被定義好的方法。
⑵ 為什麼電腦上的PYTHON運行main指令會報錯
if name == '__main__': 相當於一個新的函數,在這個函數里,你調用了main()函數,並傳入了args參數,但是在if name == '__main__': 這個函數域內,你並沒有定義args,所以報錯
⑶ python 中的if __name__=='__main__': main()是什麼 意思呢
一個 Python 源碼文件除了可以被直接運行外,還可以作為模塊(也就是庫)被導入。不管是導入還是直接運行,最頂層的代碼都會被運行(Python 用縮進來區分代碼層次)。而實際上在導入的時候,有一部分代碼我們是不希望被運行的。
if __name__ == '__main__'就相當於是 Python模擬的程序入口。Python 本身並沒有規定這么寫,這只是一種編碼習慣。由於模塊之間相互引用,不同模塊可能都有這樣的定義,而入口程序只能有一個。到底哪個入口程序被選中,這取決於__name__的值。
舉例子說明一下,假設有一個 const.py 文件,內容如下:
PI = 3.14
def main():
print "PI:", PI
main()
(3)python調用main擴展閱讀
如果模塊是被直接運行的,則代碼塊被運行,如果模塊是被導入的,則代碼塊不被運行。實際上,這個問題還可以衍生出其他的一些知識點,例如__main__.py文件與 Python 的-m參數。
輸出結果只列出了關鍵的部分,應該很容易看出他們之間的差異。直接運行是把 run.py 文件所在的目錄放到了 sys.path 屬性中。以模塊方式運行是把你輸入命令的目錄(也就是當前工作路徑),放到了 sys.path 屬性中。
⑷ python中的__name__ =="__main__"是什麼意思呢
__name__是指示當前py文件調用方式的方法。如果它等於"__main__"就表示是直接執行,如果不是,則用來被別的文件調用,這個時候if就為False,那麼它就不會執行最外層的代碼了。
比如你有個Python文件裡面
def XXXX():
#body
print "asdf"
這樣的話,就算是別的地方導入這個文件,要調用這個XXXX函數,也會執行print "asdf",因為他是最外層代碼,或者叫做全局代碼。但是往往我們希望只有我在執行這個文件的時候才運行一些代碼,不是的話(也就是被調用的話)那就不執行這些代碼,所以一般改為
def XXXX():
#body
if __name__="__main__":
print "asdf"
⑸ python main函數有什麼用
print'main'當腳本作為執行腳本時__name__的值為__main__當腳本作為模塊時__name__為模塊文件名。
main函數在程序中大多數是必須存在的。C語言標准中強制要求main函數的返回值類型為int,main函數的返回值是傳遞給操作系統,讓操作系統判斷程序的執行情況。
一個程序,無論復雜或簡單,總體上都是一個「函數」;這個函數就稱為「main 函數」,也就是「主函數」。比如有個「做菜」程序,那麼「 做菜 」這個過程就是「主函數」。在主函數中,根據情況,你可能還需要調用「買菜,切菜,炒菜」等子函數。
main函數在程序中大多數是必須存在的,但是依然有例外情況,比如windows編程中可以編寫一個動態鏈接庫模塊,這是其他windows程序可以使用的代碼。由於DLL模塊不是獨立的程序,因此不需要main函數。
從函數的形勢看,函數分兩類:
無參函數。printstar和print_message就是無參函數。在調用無參函數時,主調函數並不將數據傳送給被調用函數,一般用來執行指定的一組操作。
有參函數。在調用函數時,在主調函數和被調用函數之間有數據傳遞。也就是說,主調函數可以將數據傳遞給被調用函數使用,被調用函數中的數據也可以帶回來供主調函數使用。
⑹ python主函數怎麼寫
一般來說,Python程序員可能是這樣寫main()函數的:
"""Mole docstring.
This serves as a long usage message.
"""import sysimport getoptdef main():
# parse command line options
try:
opts, args = getopt.getopt(sys.argv[1:], "h", ["help"]) except getopt.error, msg: print msg print "for help use --help"
sys.exit(2) # process options
for o, a in opts: if o in ("-h", "--help"): print __doc__
sys.exit(0) # process arguments
for arg in args:
process(arg) # process() is defined elsewhereif __name__ == "__main__":
main()
Guido也承認之前自己寫的main()函數也是類似的結構,但是這樣寫的靈活性還不夠高,尤其是需要解析復雜的命令行選項時。為此,他向大家提出了幾點建議。
添加可選的 argv 參數
首先,修改main()函數,使其接受一個可選參數 argv,支持在互動式shell中調用該函數:
def main(argv=None):
if argv is None:
argv = sys.argv # etc., replacing sys.argv with argv in the getopt() call.1234
這樣做,我們就可以動態地提供 argv 的值,這比下面這樣寫更加的靈活:
def main(argv=sys.argv):
# etc.12
這是因為在調用函數時,sys.argv 的值可能會發生變化;可選參數的默認值都是在定義main()函數時,就已經計算好的。
但是現在sys.exit()函數調用會產生問題:當main()函數調用sys.exit()時,互動式解釋器就會推出!解決辦法是讓main()函數的返回值指示退出狀態(exit status)。因此,最後面的那行代碼就變成了這樣:
if __name__ == "__main__":
sys.exit(main())12
並且,main()函數中的sys.exit(n)調用全部變成return n。
定義一個Usage()異常
另一個改進之處,就是定義一個Usage()異常,可以在main()函數最後的except子句捕捉該異常:
import sysimport getoptclass Usage(Exception):
def __init__(self, msg):
self.msg = msgdef main(argv=None):
if argv is None:
argv = sys.argv try: try:
opts, args = getopt.getopt(argv[1:], "h", ["help"]) except getopt.error, msg: raise Usage(msg) # more code, unchanged
except Usage, err: print >>sys.stderr, err.msg print >>sys.stderr, "for help use --help"
return 2if __name__ == "__main__":
sys.exit(main())
這樣main()函數就只有一個退出點(exit)了,這比之前兩個退出點的做法要好。而且,參數解析重構起來也更容易:在輔助函數中引發Usage的問題不大,但是使用return 2卻要求仔細處理返回值傳遞的問題。