1. 程式人生 > >python可變引數詳解

python可變引數詳解

python的函式傳遞引數與java,c++有所區別,這也增強了python語言的靈活性。


1.位置引數


位置引數顧名思義,就是函式的引數按照定義位置傳入,這與java,c++相同,傳入的引數對應位置。比如:

def text(a,b,c):
    print(a,b,c)
text(1,"k","hello")
輸出結果1 k hello

2.預設引數


我們在java中,如果函式的引數傳遞少了,那麼編譯器就會報錯,在python中,如果只指定位置引數,同樣也會報錯,但是如果我們設定了預設引數,在傳遞引數的時候不傳遞預設引數程式也是可以執行的;比如,一個函式要傳遞姓名,年齡,還有地區,如果給地區指定一個預設值,那麼這個地區就可以不傳入,這樣在函式中就會給予預設引數預設的值,如果設定了就會覆蓋預設值,這樣就增加了極大的靈活性。

def enroll(name, gender, age=6, city='Beijing'):
    print('name:', name)
    print('gender:', gender)
    print('age:', age)
    print('city:', city)
enroll("kangkang",2)
enroll("xiaoming",6,12,'重慶')
enroll('Adam', 'M', city='Tianjin')#當不按順序傳遞預設值,就要指定預設引數的值

注意: 當python函式在定義的時候,預設引數就已經指定了,如果函式改變了預設引數的內容,那麼在下一次呼叫預設引數時,預設引數就已經發生改變了,這與java的static有點相似。


3.可變引數


可變引數就是指傳入的引數是可以改變的,可以是1個2個。。。,甚至不指定,想讓引數變成可變引數很簡單就在引數前面加一個號就可以了def tem(*number),你可以傳入多個引數,函式會自動組裝成一個tuple型別的number,比如你傳入的是tem(1,2,{1,2,3},(1,2,3))那麼你輸出number的結果就是(1,2,{1,2,3},(1,2,3)),如果你想傳入一個list或者tuple,你只需要在list或者tuple前面加上一個號就可以了。

def p(*a):
    print(a)


a=[1,2,3]
p(*a)
p(1,2
,{1,2},{"hello":1}) #結果: #(1, 2, 3) #(1, 2, {1, 2}, {'hello': 1})

4.關鍵字引數


可變引數允許你傳入0個或任意個引數,這些可變引數在函式呼叫時自動組裝為一個tuple。而關鍵字引數允許你傳入0個或任意個含引數名的引數,這些關鍵字引數在函式內部自動組裝為一個dict。

def person(name, age, **kw):
    print('name:', name, 'age:', age, 'other:', kw)
person('mick',10,city='chongqing',money=100)
#name: mick age: 10 other: {'city': 'chongqing', 'money': 100}

同樣的也可以直接傳入字典

d={city='shanghai',money=100}
person('mick',10,**d)
#輸出結果與上面類似

python的函式引數給我們設計程式帶來了極大的靈活性,如a(*args,**kwargs)這個函式就表示可以傳遞任何資訊到函式中,熟練掌握函式引數可以提高程式的健壯性和簡便性。
參考文章廖雪峰


                        end