Python中函数的参数传递方式
Python中函數的參數傳遞方式
.普通的參數傳遞
>>> def add(a,b):return a+b >>> print add(1,2) 3 >>> print add('abc','123') <pre name="code" class="python">abc123
2.參數個數可選,參數有默認值的傳遞
>>> def myjoin(string,sep='_'):return sep.join(string) >>> myjoin('Test') 'T_e_s_t' >>> myjoin('Test',';') 'T;e;s;t' >>> def myrange(start=0,stop,step=1):print stop,start,step 如果一個參數是可選參數 那么它后面所有的參數都應該是可選的,另外 可選參數的順序顛倒依然可以正確的給對應的參數賦值 但必須清楚的指明變量名和值。
3.個數可變參數
arg是一個tuple,可以通過訪問tuple的方法在函數中訪問arg。
另一種方式傳遞任意個數參數是通過dictionary的方式來傳遞 同樣也可以接受多個參數 但是每個參數需要指明名稱對應關系比如a=1,b=2,c=3。
>>> def printf(format,**keyword):for k in keyword.keys():print "keyword[%s] %s %s"%(k,format,keyword[k])>>> printf('is',one=1,tow=2,three=3) keyword[three] is 3 keyword[tow] is 2 keyword[one] is 1
在定義或調用這種函數時,要遵循以下規則:
?? 1. arg=<value>必須在arg后
?? 2. *arg必須在arg=<value>后
?? 3. **arg必須在*arg后
在函數調用過程中,形參賦值的過程是這樣的:
首先按順序把“arg”這種形式的實參給對應的形參
第二,把“arg=<value>”這種形式的實參賦值給形式
第三,把多出來的“arg”這種形式的實參組成一個tuple給帶一個星號的形參
第四,把多出來的“key=value”這種形式的實參轉為一個dictionary給帶兩個星號的形參。
聽起來好復雜,實際是是很簡單的。很直觀,來看例子:
test(1) ===> 1 5 () {} test(1,2) ===> 1 2 () {} test(1,2,3) ===> 1 2 (3,) {} test(1,2,3,4) ===> 1 2 (3,4) test(x=1) ===> 1 5 () {} test(x=1,y=1) ===> 1 1 () {} test(x=1,y=1,a=1) ===> 1 1 () {'a':1} test(x=1,y=1,a=1,b=1) ===> 1 1 () {'a':1,'b':1} test(1,y=1) ===> 1 1 () {} test(1,2,y=1) ===> 出錯,說y給賦了多個值 test(1,2,3,4,a=1) ===> 1 2 (3,4) {'a':1} test(1,2,3,4,k=1,t=2,o=3) ===> 1 2 (3,4) {'k':1,'t':2,'o':3} 在python中函數參數的定義主要有四種方式:
1.F(arg1,arg2,...)
這是最常見的定義方式,一個函數可以定義任意個參數,每個參數間用逗號分割,用這種方式定義的函數在調用的的時候也必須在函數名后的小括號里提供個數相等的值(實際參數),而且順序必須相同,也就是說在這種調用方式中,形參和實參的個數必須一致,而且必須一一對應,也就是說第一個形參對應這第一個實參。
例如:
def a(x,y):print x,y調用該函數,a(1,2)則x取1,y取2,形參與實參相對應,如果a(1)或者a(1,2,3)則會報錯。
2.F(arg1,arg2=value2,...)
這種方式就是第一種的改進版,提供了默認值
def a(x,y=3):print x,y
調用該函數,a(1,2)同樣還是x取1,y取2,但是如果a(1),則不會報錯了,這個時候x還是1,y則為默認的3。上面這倆種方式,還可以更換參數位置,比如a(y=8,x=3)用這種形式也是可以的。
3.F(*arg1)
上面倆個方式是有多少個形參,就傳進去多少個實參,但有時候會不確定有多少個參數,則此時第三種方式就比較有用,它以一個*加上形參名的方式來表示這個函數的實參個數不定,可能為0個也可能為n個。注意一點是,不管有多少個,在函數內部都被存放在以形參名為標識符的tuple中。
形參名前加倆個*表示,參數在函數內部將被存放在以形式名為標識符的dictionary中,這時調用函數的方法則需要采用arg1=value1,arg2=value2這樣的形式。
>>> def a(**x): if len(x)==0:print 'None' else:print x >>> a() None >>> a(x=1,y=2) {'y': 2, 'x': 1} #存放在字典中 >>> a(1,2) #這種調用則報錯 Traceback (most recent call last): File "<pyshell#25>", line 1, in -toplevel-a(1,2) TypeError: a() takes exactly 0 arguments (2 given)
總結
以上是生活随笔為你收集整理的Python中函数的参数传递方式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: pyghon list指定位置插入字符的
- 下一篇: Python 文件读取与写入操作方法