這是菜鳥(niǎo)學(xué)python的第22篇原創(chuàng)文章 閱讀本文大概需要5分鐘 前面講了函數(shù)里面的作用域,今天我們來(lái)講python函數(shù)的參數(shù)傳遞,參數(shù)傳遞用法非常靈活(同時(shí)也混淆弄錯(cuò)),我們來(lái)剖析一下Python里面的參數(shù)傳遞長(zhǎng)什么樣子,以及為啥長(zhǎng)成這個(gè)樣子,到底有什么奧妙在里面 語(yǔ)言是相同的,相信有其他編程語(yǔ)言功力的同學(xué)比如java,c++,perl這些函數(shù)里面也有類(lèi)似的設(shè)計(jì).Python里面對(duì)函數(shù)參數(shù)傳遞分以下幾種:
1)任意多個(gè)非關(guān)鍵字可變長(zhǎng)參數(shù)(元組) 2)任意多個(gè)關(guān)鍵字變量參數(shù)(字典) 有同學(xué)說(shuō)怎么這么麻煩啊,這跟我們生活中的很多產(chǎn)品類(lèi)似,比如相機(jī)的傻瓜模式和專(zhuān)家模式,汽車(chē)?yán)锩娴?span>自動(dòng)檔和手動(dòng)擋,大同小異python有這么多參數(shù)的傳遞方式,其實(shí)主要了為了軟件設(shè)計(jì)的靈活和功能的擴(kuò)展. 我先從最簡(jiǎn)單的開(kāi)始介紹: 1.位置參數(shù) python中最普通的函數(shù)使用是這種帶位置參數(shù)的函數(shù),這跟我們其他語(yǔ)言的普通的函數(shù)是一樣的,所有參數(shù)在傳遞的時(shí)候按照位置來(lái)傳遞,列如: 把'Hi Python'賦給message,2賦給times 2.默認(rèn)參數(shù) 一般我們調(diào)用函數(shù)的時(shí)候都會(huì)傳入值,但是懶人有的時(shí)候,希望我輸入了值就用我的,我懶的時(shí)候不輸入了python也能給我一個(gè)默認(rèn)值,這就用到了默認(rèn)參數(shù)的特性,看個(gè)例子吧: def printMessage(message,times=2): print (message*times) printMessage('Hi Python:')#沒(méi)有輸入times的值 >>Hi Python:Hi Python: 看我們很懶,沒(méi)有輸入times的值,python就會(huì)自動(dòng)用times的默認(rèn)值2,是不是很爽
3.關(guān)鍵字參數(shù) 在調(diào)用函數(shù)的時(shí)候,我們希望傳遞的參數(shù)不是僵硬的通過(guò)位置來(lái)傳遞,能夠有一定的靈活性,能通過(guò)變量名進(jìn)行匹配. 接著說(shuō)難點(diǎn)的:關(guān)于任意數(shù)量參數(shù) 先看一個(gè)打印分?jǐn)?shù)的函數(shù),這個(gè)函數(shù)設(shè)計(jì)的比較死板,看python是如何解決的,然后引出我們的話題 def printScore(msg,values): if not values: print msg else: values_str=', '.join(str(x)for x in values) print ('{},{}'.format(msg,values_str)) printScore('My scores are',[100,90]) >>My scores are,100, 90 printScore('My scores are',[])#那怕你不想輸入分?jǐn)?shù),也必須輸入一個(gè)空的列表 >>My scores are
4.任意多個(gè)位置參數(shù)的函數(shù) python有兩種方式聲明可變參數(shù),我們先說(shuō)第一種: 在printScore函數(shù)中,我們做一小丟丟的改動(dòng),我們?cè)趨?shù)values前面加*,變成(msg,*values),表示只有第一個(gè)參數(shù)的msg是調(diào)用者必須要指定的,該參數(shù)后面,可以跟任意數(shù)量的位置參數(shù)(主要是任意數(shù)量,當(dāng)然包含懶人專(zhuān)用的省略不寫(xiě)拉) def printScore(msg,*values): if not values: print msg else: values_str=', '.join(str(x)for x in values) print ('{},{}'.format(msg,values_str)) printScore('My scores are') >>My scores are 是不是很爽,剛才說(shuō)任意數(shù)量,我們加多個(gè)參數(shù)試試看: printScore('My scores are',100,90,80) >>My scores are,100, 90, 80 一下把100,90,80都打印出來(lái)呢,是怎么做到的,是因?yàn)閜ython會(huì)自動(dòng)把*操作符后面的形參變成元組傳給函數(shù). 5.任意多個(gè)關(guān)鍵字形式的參數(shù) python有兩種方式聲明可變參數(shù),我們接著說(shuō)第二種:如何能接受任意數(shù)量的關(guān)鍵字參數(shù),是用**雙星號(hào)操作符來(lái)表示 其實(shí)就是把**后面的變量參數(shù),按照字典來(lái)處理,傳遞給函數(shù). 綜合例子: 好最后拿一個(gè)綜合例子結(jié)尾:(包含了關(guān)鍵字參數(shù),默認(rèn)參數(shù),可變?nèi)我鈹?shù)量參數(shù)) def total(initial=5,*numbers,**keywords): count=initial for number in numbers: count+=number for key in keywords: count+=keywords.get(key) return count print total(10,1,2,3,apple=50,orange=100) >>166 好了函數(shù)里的參數(shù)傳遞就講到這里啦,希望能給初學(xué)者一些啟發(fā),若有什么不懂的,也可以留言跟我探討交流. |
|
來(lái)自: Four兄 > 《Python筆記》