編程派微信號:codingpy
每個程式設計師在學習編程的過程中,肯定沒少寫過main()函數,Python程式設計師也不例外。本文為大家分享Python之父Guido van Rossum推薦的函數寫法,可以大大提高這個函數的靈活性。
有篇文章將Guido列入了歷史上最偉大的12名程式設計師之一哦。
一般來說,Python程式設計師可能是這樣寫main()函數的:
Guido也承認之前自己寫的main()函數也是類似的結構,但是這樣寫的靈活性還不夠高,尤其是需要解析複雜的命令行選項時。為此,他向大家提出了幾點建議。
首先,修改main()函數,使其接受一個可選參數 argv,支持在交互式shell中調用該函數:
def main(argv=None): if argv is None: argv = sys.argv
這樣做,我們就可以動態地提供 argv 的值,這比下面這樣寫更加的靈活:
def main(argv=sys.argv):
這是因為在調用函數時,sys.argv 的值可能會發生變化;可選參數的默認值都是在定義main()函數時,就已經計算好的。
但是現在sys.exit()函數調用會產生問題:當main()函數調用sys.exit()時,交互式解釋器就會推出!解決辦法是讓main()函數的返回值指示退出狀態(exit status)。因此,最後面的那行代碼就變成了這樣:
if __name__ == "__main__": sys.exit(main())
並且,main()函數中的sys.exit(n)調用全部變成return n。
另一個改進之處,就是定義一個Usage()異常,可以在main()函數最後的except子句捕捉該異常:
這樣main()函數就只有一個退出點(exit point)了,這比之前兩個退出點的做法要好。而且,參數解析重構起來也更容易:在輔助函數中引發Usage的問題不大,但是使用return 2卻要求仔細處理返回值傳遞的問題。
閱讀英文原文:http://www.artima.com/weblogs/viewpost.jsp?thread=4829
▼