一、形參和實參
函式引數的作用是傳遞資料給函式使用
在使用的過程中,引數有兩種形式:形式引數和實際引數
形參:定義函式的引數
實參:呼叫函式時的引數
根據實際引數型別不同,將實際引數傳遞給形參的方式有兩種:值傳遞和引用傳遞
值傳遞:
實參為不可變物件,傳遞給形參後,形參的值改變,實參值不變。(如 fun(a),傳遞的只是 a 的值,沒有影響 a 物件本身,比如在 fun(a) 內部修改 a 的值,只是修改另外乙個賦值的物件,不會影響 a 本身)
引用傳遞:
實參為可變物件,傳遞給形參後,形參的值改變,實參值也會改變(如( fun(la),則是將 la 真正的傳過去,修改後 fun 外部的 la 也會收影響)
# 值傳遞和引用傳遞
def fun(obj):
print(obj)
obj+= 1obj1= "123456"demo(obj1)
print("函式呼叫後 obj1:" +obj1)
obj2= [1 ,2,3]
demo(obj2)
print("函式呼叫後:"+obj2)
# 結果123456函式呼叫後obj1:123456[1, 2, 3]
函式呼叫後obj2:[1, 2, 3, 1, 2, 3]
二、位置引數、關鍵字引數、預設引數、可變引數
1、位置引數(必備引數)
函式呼叫時的數量,位置,引數型別必須和定義的一樣
2、關鍵字引數
函式呼叫時,使用形參的名字 = 輸入的引數值,此時位置可與定義時不一致
3、預設引數
函式定義時,為引數設定乙個預設的值,當函式呼叫時,沒有傳入這個引數值,直接使用這個預設值,
注意:定義函式時,預設引數必須指向不可變引數,如果指向可變物件,多次呼叫,可能時得到的不是意料之內的結果。
# 預設引數必須值相不可變物件,如果指向可變物件,結果不對
def demo1(obj=):
print( obj )
def demo2(obj=none):if obj ==none:
obj=
print(obj)
demo1()
demo1()
demo1()
demo2()
demo2()
demo2()
#結果[1]
[1, 1]
4、可變引數(不定長引數)
可變引數有兩種形式:一種時 *arg, 一種時 ** kwargs
*args :
這種形式表示接受任意多個實際引數將其放到乙個與那組中
**kwargs:
這種形式表示接受任意多個實際引數將其放到乙個字典中,類似關鍵字引數
#可變引數
#*args形式
def demo3(*args):
print"\n i like coffee:"
for i inargs:
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 inkwargs.items():
print i,':',j
#呼叫:可直接傳乙個字典
person("paul",77,***="male",job="teacher")
#也可以通過字典變數傳
obj2=
demo4(**obj2)
#結果i like coffee:
巴西 土耳其
i like coffee:
藍山 摩卡 卡布奇諾
name: paul age:77 other:
name:age
lily :12mary :23hanmeimei :34
三、引數組合
在 python 中定義函式,可以用必選引數,預設引數,可變引數,關鍵字引數組合使用,但是注意,引數定義的順序必須是:
必選引數、預設引數、可變引數、關鍵字引數
pytho函式星號引數
神奇的星號 傳遞實參和定義形參 所謂實參就是呼叫函式時傳入的引數,形參則是定義函式是定義的引數 的時候,你還可以使用兩個特殊的語法 呼叫函式時使用 test args 的作用其實就是把序列 args 中的每個元素,當作位置引數傳進去。比如上面這個 如果 args 等於 1,2,3 那麼這個 就等價於...
python資料引數 python引數
函式引數 實際引數 位置實參 按順序 函式名 資料1,資料2 序列實參 拆 函式名 序列 關鍵字實參 按名字 函式名 形參名1 資料1,形參名2 資料2 字典實參 拆 函式名 字典 形式引數 限制實參傳遞方式 預設形參 可選 def 函式名 形參名1 資料1,形參名2 資料2 位置形參 必填 def...
python資料引數化
pytest資料引數化 資料寫入到.py檔案中 引數化方法使用 在乙個方法或者函式前面新增下方的標記 pytest.mark.parametrize argnames,ar alues argnames 要引數化的變數,string 逗號分隔 list,tuple ar alues 引數化的值,li...