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