摘要:下面總結(jié)通過總結(jié)常見的函數(shù)參數(shù)定義方式,來理解參數(shù)傳遞的流程。這種方式最常見了,列出有限個(gè)數(shù)的參數(shù),并且彼此之間用逗號(hào)隔開。而且,必須數(shù)量一致,一一對(duì)應(yīng)。
就前面所講,函數(shù)的基本內(nèi)容已經(jīng)完畢。但是,函數(shù)還有很多值得不斷玩味的細(xì)節(jié)。這里進(jìn)行闡述。
參數(shù)的傳遞python中函數(shù)的參數(shù)通過賦值的方式來傳遞引用對(duì)象。下面總結(jié)通過總結(jié)常見的函數(shù)參數(shù)定義方式,來理解參數(shù)傳遞的流程。
def foo(p1,p2,p3,...)這種方式最常見了,列出有限個(gè)數(shù)的參數(shù),并且彼此之間用逗號(hào)隔開。在調(diào)用函數(shù)的時(shí)候,按照順序以此對(duì)參數(shù)進(jìn)行賦值,特備注意的是,參數(shù)的名字不重要,重要的是位置。而且,必須數(shù)量一致,一一對(duì)應(yīng)。第一個(gè)對(duì)象(可能是數(shù)值、字符串等等)對(duì)應(yīng)第一個(gè)參數(shù),第二個(gè)對(duì)應(yīng)第二個(gè)參數(shù),如此對(duì)應(yīng),不得偏左也不得偏右。
>>> def foo(p1,p2,p3): ... print "p1==>",p1 ... print "p2==>",p2 ... print "p3==>",p3 ... >>> foo("python",1,["qiwsir","github","io"]) #一一對(duì)應(yīng)地賦值 p1==> python p2==> 1 p3==> ["qiwsir", "github", "io"] >>> foo("python") Traceback (most recent call last): File "def foo(p1=value1,p2=value2,...)", line 1, in TypeError: foo() takes exactly 3 arguments (1 given) #注意看報(bào)錯(cuò)信息 >>> foo("python",1,2,3) Traceback (most recent call last): File " ", line 1, in TypeError: foo() takes exactly 3 arguments (4 given) #要求3個(gè)參數(shù),實(shí)際上放置了4個(gè),報(bào)錯(cuò)
這種方式比前面一種更明確某個(gè)參數(shù)的賦值,貌似這樣就不亂子了,很明確呀。頗有一個(gè)蘿卜對(duì)著一個(gè)坑的意味。
還是上面那個(gè)函數(shù),用下面的方式賦值,就不用擔(dān)心順序問題了。
>>> foo(p3=3,p1=10,p2=222) p1==> 10 p2==> 222 p3==> 3
也可以采用下面的方式定義參數(shù),給某些參數(shù)有默認(rèn)的值
>>> def foo(p1,p2=22,p3=33): #設(shè)置了兩個(gè)參數(shù)p2,p3的默認(rèn)值 ... print "p1==>",p1 ... print "p2==>",p2 ... print "p3==>",p3 ... >>> foo(11) #p1=11,其它的參數(shù)為默認(rèn)賦值 p1==> 11 p2==> 22 p3==> 33 >>> foo(11,222) #按照順序,p2=222,p3依舊維持原默認(rèn)值 p1==> 11 p2==> 222 p3==> 33 >>> foo(11,222,333) #按順序賦值 p1==> 11 p2==> 222 p3==> 333 >>> foo(11,p2=122) p1==> 11 p2==> 122 p3==> 33 >>> foo(p2=122) #p1沒有默認(rèn)值,必須要賦值的,否則報(bào)錯(cuò) Traceback (most recent call last): File "def foo(*args)", line 1, in TypeError: foo() takes at least 1 argument (1 given)
這種方式適合于不確定參數(shù)個(gè)數(shù)的時(shí)候,在參數(shù)args前面加一個(gè)*,注意,僅一個(gè)喲。
>>> def foo(*args): #接收不確定個(gè)數(shù)的數(shù)據(jù)對(duì)象 ... print args ... >>> foo("qiwsir.github.io") #以tuple形式接收到,哪怕是一個(gè) ("qiwsir.github.io",) >>> foo("qiwsir.github.io","python") ("qiwsir.github.io", "python")
上一講中已經(jīng)有例子說明,可以和前面的混合使用。此處不贅述。
def foo(**args)這種方式跟上面的區(qū)別在于,必須接收類似arg=val形式的。
>>> def foo(**args): #這種方式接收,以dictionary的形式接收數(shù)據(jù)對(duì)象 ... print args ... >>> foo(1,2,3) #這樣就報(bào)錯(cuò)了 Traceback (most recent call last): File "", line 1, in TypeError: foo() takes exactly 0 arguments (3 given) >>> foo(a=1,b=2,c=3) #這樣就可以了,因?yàn)橛辛随I值對(duì) {"a": 1, "c": 3, "b": 2}
下面來一個(gè)綜合的,看看以上四種參數(shù)傳遞方法的執(zhí)行順序
>>> def foo(x,y=2,*targs,**dargs): ... print "x==>",x ... print "y==>",y ... print "targs_tuple==>",targs ... print "dargs_dict==>",dargs ... >>> foo("1x") x==> 1x y==> 2 targs_tuple==> () dargs_dict==> {} >>> foo("1x","2y") x==> 1x y==> 2y targs_tuple==> () dargs_dict==> {} >>> foo("1x","2y","3t1","3t2") x==> 1x y==> 2y targs_tuple==> ("3t1", "3t2") dargs_dict==> {} >>> foo("1x","2y","3t1","3t2",d1="4d1",d2="4d2") x==> 1x y==> 2y targs_tuple==> ("3t1", "3t2") dargs_dict==> {"d2": "4d2", "d1": "4d1"}
通過上面的例子,看官是否看出什么名堂了呢?
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/45301.html
摘要:每個(gè)形參的名稱均可作為過程內(nèi)的局部變量。實(shí)參表示在您調(diào)用過程時(shí)傳遞給過程形參的值??垂偃绻仓^皮看完這段引文,發(fā)現(xiàn)里面有幾個(gè)關(guān)鍵詞參數(shù)變量形參實(shí)參。好似全局變量能力很強(qiáng)悍,能夠統(tǒng)帥函數(shù)內(nèi)外。 對(duì)于變量和參數(shù),不管是已經(jīng)敲代碼多年的老鳥,還是剛剛接觸編程的小白,都會(huì)有時(shí)候清楚,有時(shí)候又有點(diǎn)模糊。因?yàn)?,在?shí)際應(yīng)用中,它們之間分分離離,比如,敲代碼都知道,x=3中x是變量,它不是參數(shù),但是...
摘要:關(guān)于函數(shù)的事情,總是說不完的,下面就羅列一些編寫函數(shù)的注意事項(xiàng)。函數(shù)具有獨(dú)立性。也就是常說的不要有太強(qiáng)的耦合性。要讓函數(shù)能夠獨(dú)立于外部的東西。函數(shù)實(shí)現(xiàn)的功能和目標(biāo)要單一化。這跟前面的道理是一樣的,目的是降低耦合性。 關(guān)于函數(shù)的事情,總是說不完的,下面就羅列一些編寫函數(shù)的注意事項(xiàng)。特別聲明,這些事項(xiàng)不是我總結(jié)的,我是從一本名字為《Learning Python》的書里面抄過來的,順便寫成...
摘要:特別提醒,看官不要自宮,因?yàn)楸窘坛滩皇潜傩皠ψV,也不是葵花寶典,撰寫本課程的人更是生理健全者。直到目前,科學(xué)上尚未有證實(shí)或證偽自宮和寫程序之間是否存在某種因果關(guān)系。和是中用的最多的方法啦。 Do not store up for yourselves treasures on earth, where moth and rust consume and where thieves...
摘要:字符串格式化的字符串字面值簡(jiǎn)稱為字符串,是在字符串的開始引號(hào)之前加上一個(gè)或。在這樣的字符串中,我們可以在花括號(hào)中引用變量或表達(dá)式。但在中,更推薦使用方法或字符串格式化。 利用print函數(shù)把信息打印到顯示器,是我們編程中經(jīng)常使用的功能。為了讓打印的信息更容易讀懂,就需要更好的格式來打印。Python提供了記住不同的格式化輸出的方法。推薦的方法就是:f-字符串和str.format()函...
摘要:在對(duì)象接口后包裝其實(shí)現(xiàn)的細(xì)節(jié),從而隔離了代碼的修改對(duì)用戶產(chǎn)生的影響。類提供了一個(gè)新的本地作用域,最小化了變量名沖突。類其實(shí)并沒有結(jié)束,不過本講座到此對(duì)類暫告一段。 前面對(duì)類的有關(guān)內(nèi)容已經(jīng)描述不少了,其實(shí)話題遠(yuǎn)遠(yuǎn)沒有結(jié)束,不過對(duì)于初學(xué)者,掌握這些已經(jīng)算是入門,在以后的實(shí)踐中,還需要進(jìn)行體會(huì)和感悟。 這幾天和幾個(gè)朋友以各種途徑討論過OOP的相關(guān)問題,他們是:令狐蟲、Frank、晉劍、小馮...
閱讀 1125·2021-11-24 10:21
閱讀 2561·2021-11-19 11:35
閱讀 1662·2019-08-30 15:55
閱讀 1293·2019-08-30 15:54
閱讀 1192·2019-08-30 15:53
閱讀 3498·2019-08-29 17:21
閱讀 3308·2019-08-29 16:12
閱讀 3412·2019-08-29 15:23