python中參數總結


一、形參和實參

函數參數的作用是傳遞數據給函數使用。

在使用的過程中,參數有兩種形式:形式參數和實際參數

形參:定義函數時的參數

實參:調用函數時的參數

根據實際參數類型不同,將實際參數傳遞給形參的方式有兩種:值傳遞和引用傳遞

值傳遞:實參為不可變對象,傳遞給形參后,形參的值改變,實參值不變。如fun(a),傳遞的只是a的值,沒有影響a對象本身。比如在 fun(a)內部修改 a 的值,只是修改另一個復制的對象,不會影響 a 本身。

引用傳遞:實參為可變對象,傳遞給形參后,形參的值改變,實參值改變。如 fun(la),則是將 la 真正的傳過去,修改后fun外部的la也會受影響

#值傳遞與引用傳遞
def demo(obj):
    print obj
    obj+=obj

obj1="123456"
demo(obj1)
print "函數調用后obj1:"+obj1

obj2=[1,2,3]
demo(obj2)
print "函數調用后obj2:"+str(obj2)
#結果
123456
函數調用后obj1:123456
[1, 2, 3]
函數調用后obj2:[1, 2, 3, 1, 2, 3]

二、位置參數、關鍵字參數、默認參數、可變參數

1.位置參數(必備參數)

函數調用時的數量,位置,參數類型必須和定義時的一致。

2.關鍵字參數

函數調用時,使用形參的名字=輸入的參數值,此時位置可與定義時不一致。

3.默認參數

函數定義時,為參數設置一個默認值,當函數調用時,沒有傳入這個參數值,直接使用這個默認值。注意:

定義函數時,默認參數必須指向不可變對象;如果指向可變對象,多次調用,可能得到的不是意料之內的結果。

#默認參數必須指向不可變對象,如果指向可變對象,結果不對

def demo1(obj=[]):
    print obj
    obj.append(1)

def demo2(obj=None):
    if obj==None:
        obj=[]
    print obj
    obj.append(1)

demo1()
demo1()
demo1()

demo2()
demo2()
demo2()
#結果
[]
[1]
[1, 1]
[]
[]
[]

4.可變參數(不定長參數)

可變參數有兩種形式:一種是*args,另一種是**kwargs

*args:這種形式表示接受任意多個實際參數將其放到一個元組中。

**kwargs:這種形式表示接受任意多個實際參數將其放到一個字典中,類似關鍵字參數

#可變參數
#*args形式
def demo3(*args):
    print "\n I like coffee:"
    for i in args:
        print i,
#調用形式:可直接傳一個tuple
demo3('巴西','土耳其')
#也可以通過list或者tuple的變量傳
obj1=['藍山','摩卡','卡布奇諾']
demo3(*obj1)

#**kwargs形式
def person(name, age, **kw):
    print'\n name:', name, 'age:', age, 'other:', kw
def demo4(**kwargs):
    print "\n name:age"
    for i,j in kwargs.items():
        print i,':',j

#調用:可直接傳一個字典
person("Paul",77,sex="male",job="teacher")
#也可以通過字典變量傳
obj2={'Mary':23,'HanMeiMei':34,'Lily':12}
demo4(**obj2)
#結果
 I like coffee:
巴西 土耳其 
 I like coffee:
藍山 摩卡 卡布奇諾 
 name: Paul age: 77 other: {'job': 'teacher', 'sex': 'male'}

 name:age
Lily : 12
Mary : 23
HanMeiMei : 34

三、參數組合

在Python中定義函數,可以用必選參數、默認參數、可變參數、關鍵字參數組合使用。但是注意,參數定義的順序必須是:必選參數、默認參數、可變參數、關鍵字參數。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM