一般來說,Python程序員可能是這樣寫main()函數(shù)的:

成都創(chuàng)新互聯(lián)公司公司2013年成立,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項(xiàng)目網(wǎng)站制作、網(wǎng)站設(shè)計網(wǎng)站策劃,項(xiàng)目實(shí)施與項(xiàng)目整合能力。我們以讓每一個夢想脫穎而出為使命,1280元尋烏做網(wǎng)站,已為上家服務(wù),為尋烏各地企業(yè)和個人服務(wù),聯(lián)系電話:13518219792
"""Module 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()1234567891011121314151617181920212223242526
Guido也承認(rèn)之前自己寫的main()函數(shù)也是類似的結(jié)構(gòu),但是這樣寫的靈活性還不夠高,尤其是需要解析復(fù)雜的命令行選項(xiàng)時。為此,他向大家提出了幾點(diǎn)建議。
添加可選的 argv 參數(shù)
首先,修改main()函數(shù),使其接受一個可選參數(shù) argv,支持在交互式shell中調(diào)用該函數(shù):
def main(argv=None):
if argv is None:
argv = sys.argv # etc., replacing sys.argv with argv in the getopt() call.1234
這樣做,我們就可以動態(tài)地提供 argv 的值,這比下面這樣寫更加的靈活:
def main(argv=sys.argv):
# etc.12
這是因?yàn)樵谡{(diào)用函數(shù)時,sys.argv 的值可能會發(fā)生變化;可選參數(shù)的默認(rèn)值都是在定義main()函數(shù)時,就已經(jīng)計算好的。
但是現(xiàn)在sys.exit()函數(shù)調(diào)用會產(chǎn)生問題:當(dāng)main()函數(shù)調(diào)用sys.exit()時,交互式解釋器就會推出!解決辦法是讓main()函數(shù)的返回值指示退出狀態(tài)(exit status)。因此,最后面的那行代碼就變成了這樣:
if __name__ == "__main__":
sys.exit(main())12
并且,main()函數(shù)中的sys.exit(n)調(diào)用全部變成return n。
定義一個Usage()異常
另一個改進(jìn)之處,就是定義一個Usage()異常,可以在main()函數(shù)最后的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())123456789101112131415161718192021222324
這樣main()函數(shù)就只有一個退出點(diǎn)(exit)了,這比之前兩個退出點(diǎn)的做法要好。而且,參數(shù)解析重構(gòu)起來也更容易:在輔助函數(shù)中引發(fā)Usage的問題不大,但是使用return 2卻要求仔細(xì)處理返回值傳遞的問題。
使用關(guān)鍵詞 def 聲明這是一個函數(shù)
1def 函數(shù)名 (參數(shù)):
2 語句塊
參數(shù)可以沒有,也可以有多個,用逗號隔開,第一行稱為函數(shù)頭,結(jié)尾一定要加冒號,代表開始進(jìn)入函數(shù)體的執(zhí)行。
語句塊也就是函數(shù)體,是關(guān)于這個函數(shù)要實(shí)現(xiàn)的功能的語句,語句要有返回值即return語句,如果沒有return語句,就代表return none.
Python 有很多有用的內(nèi)置函數(shù), 但還是不能滿足程序員的需求, 所以需要 自定義函數(shù) 。
如何編寫 自定義函數(shù) , 需要用到 def語句, 函數(shù)名, 括號及參數(shù), 冒號, 函數(shù)說明,內(nèi)置縮進(jìn)編碼模塊,return 語句 , 其中有一些也可省略不寫,后面會慢慢介紹。
編寫函數(shù)不可或缺的元素, 一定都要寫。函數(shù)名盡量寫得簡單易懂。
一般是對函數(shù)的描述說明。
這是編寫具體的 操作命令 的地方, 如果還未想好如何編寫, 可以使用 pass 來占位,讓程序可以運(yùn)行起來,防止調(diào)試出錯。
參數(shù)放在最后講, 是因?yàn)檫@里面的東西還是很多的。首先看個例子。
如上的案例都是限制了參數(shù)個數(shù)的, 最多傳三個參數(shù) name/age/city , 但是如果有一些特例,需要傳多個參數(shù)怎么辦呢。 參數(shù)前面加個 * , 變成 可變參數(shù) 。
那如果想要傳多個包含名稱的參數(shù),例如a=1,b=2,c=3......,那該怎么寫呢。參數(shù)前面加個 ** , 變成 關(guān)鍵字參數(shù) 。
Python在命令行定義函數(shù)的方法如下:
打開電腦運(yùn)行窗體,輸入cmd,點(diǎn)擊確定
命令行窗口,輸入python,進(jìn)入python命令行,編寫函數(shù)后,敲兩次回車,即定義好了函數(shù)
測試函數(shù)可以正常使用
更多Python相關(guān)技術(shù)文章,請?jiān)L問Python教程欄目進(jìn)行學(xué)習(xí)!以上就是小編分享的關(guān)于python如何在命令行定義函數(shù)的詳細(xì)內(nèi)容希望對大家有所幫助,更多有關(guān)python教程請關(guān)注環(huán)球青藤其它相關(guān)文章!
4.6. 定義函數(shù)
我們可以創(chuàng)建一個用來生成指定邊界的斐波那契數(shù)列的函數(shù):
def fib(n): # write Fibonacci series up to n
... """Print a Fibonacci series up to n."""
... a, b = 0, 1
... while a n:
... print(a, end=' ')
... a, b = b, a+b
... print()
...
# Now call the function we just defined:
... fib(2000)
0 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597
關(guān)鍵字 def 引入了一個函數(shù) 定義。在其后必須跟有函數(shù)名和包括形式參數(shù)的圓括號。函數(shù)體語句從下一行開始,必須是縮進(jìn)的。
函數(shù)體的第一行語句可以是可選的字符串文本,這個字符串是函數(shù)的文檔字符串,或者稱為 docstring。(更多關(guān)于 docstrings 的信息請參考 文檔字符串) 有些工具通過 docstrings 自動生成在線的或可打印的文檔,或者讓用戶通過代碼交互瀏覽;在你的代碼中包含 docstrings 是一個好的實(shí)踐,讓它成為習(xí)慣吧。
函數(shù) 調(diào)用 會為函數(shù)局部變量生成一個新的符號表。確切的說,所有函數(shù)中的變量賦值都是將值存儲在局部符號表。變量引用首先在局部符號表中查找,然后是包含函數(shù)的局部符號表,然后是全局符號表,最后是內(nèi)置名字表。因此,全局變量不能在函數(shù)中直接賦值(除非用 global 語句命名),盡管他們可以被引用。
函數(shù)引用的實(shí)際參數(shù)在函數(shù)調(diào)用時引入局部符號表,因此,實(shí)參總是 傳值調(diào)用 (這里的 值 總是一個對象 引用 ,而不是該對象的值)。[1] 一個函數(shù)被另一個函數(shù)調(diào)用時,一個新的局部符號表在調(diào)用過程中被創(chuàng)建。
一個函數(shù)定義會在當(dāng)前符號表內(nèi)引入函數(shù)名。函數(shù)名指代的值(即函數(shù)體)有一個被 Python 解釋器認(rèn)定為 用戶自定義函數(shù) 的類型。 這個值可以賦予其他的名字(即變量名),然后它也可以被當(dāng)作函數(shù)使用。這可以作為通用的重命名機(jī)制:
fib
f = fib
f(100)
0 1 1 2 3 5 8 13 21 34 55 89
如果你使用過其他語言,你可能會反對說:fib 不是一個函數(shù),而是一個方法,因?yàn)樗⒉环祷厝魏沃怠J聦?shí)上,沒有 return 語句的函數(shù)確實(shí)會返回一個值,雖然是一個相當(dāng)令人厭煩的值(指 None )。這個值被稱為 None (這是一個內(nèi)建名稱)。如果 None 值是唯一被書寫的值,那么在寫的時候通常會被解釋器忽略(即不輸出任何內(nèi)容)。如果你確實(shí)想看到這個值的輸出內(nèi)容,請使用 print() 函數(shù):
網(wǎng)頁名稱:在python中寫函數(shù),Python函數(shù)寫法
網(wǎng)頁鏈接:http://chinadenli.net/article24/hcpcje.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)頁設(shè)計公司、網(wǎng)站導(dǎo)航、定制開發(fā)、網(wǎng)站制作、虛擬主機(jī)、品牌網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)