一、形參與實參
形參:在函式的定義階段使用的引數稱之為形式引數,簡稱形參,類似與變數名。
def實參:在函式的呼叫階段使用的引數稱之為實際引數,簡稱實參,類似與變數值。func(x, y): # x,y都是形參
print(x, y)
func形參於實參的關係:(1,2)
# 1,2都是實參
1實參的型別:、在呼叫階段,實參(變數值)會繫結給形參(變數名)
2、這種繫結關係只能在函式體內使用
3、實參與形參的繫結關係在函式呼叫時生效,函式呼叫結束後解除繫結關係
1.func(1,2)
2.
a3.=1b=2
func(a,b)
func二、形參與實參的具體使用(int('1'),2)
func(func1(1,2,),func2(2,3),333)
1.位置形參:按照從左到右的順序依次定義引數
在函式定義階段,按照從左到右的順序直接定義的"變數名"
特點:必須被傳值,多乙個不行少乙個也不行
deffunc(x,y):
print(x,y)
1.位置實參:在函式呼叫階段,按照從左到右的順序依次傳入引數
特點:按照順序與形參一一對應
func(1,2)
func(2,1)
2.關鍵字實參:在函式的呼叫階段,按照key=value的形式傳入的引數
特點:可以不按照順序傳
位置實參和關鍵字實參(混合使用):
# 位置實參必須在關鍵字實參前func(1,y=2)
func(y=2,1)
# error
# 不能為同乙個形參重複傳值func(1,y=2,x=3)
func(1,2,x=3,y=4)
3.預設引數:在函式的定義階段,就已經被賦值了的引數,稱之為預設引數。
特點:因為在定義階段就已經被賦值了,所以在呼叫階段可以不為其賦值。
def register(name,age,gender='男'):位置形參與預設形參(混合使用)print(name,age,gender)
register('三炮',18)
register('二炮',19)
register('大炮',19)
register('沒炮',19,'女')
1.位置形參必須在預設形參的左邊
def func(y=2,x):2.預設引數在函式的定義階段就已經被繫結記憶體位址pass
m=2由於可變型別的特性上面這種方法並不適用def func(x,y=m): # y=>2的記憶體位址
print(x,y)
m=3333333333333333333 # 並不會受到影響
func(1)
# 1 2
ps:不推薦使用可變型別
m = [111111, ]def func(x, y=m): # y=>[111111, ]的記憶體位址
print(x, y)
func(1)
三、可變長度的引數(*與**的用法)
可變長度指的是在呼叫函式時,傳入的值(實參)的個數不固定。
而實參是用來為形參賦值的,所以對應著,針對溢位的實參必須有對應的形參來接收。
1.長度可變的位置引數
*的位置形參:
用來接收溢位的位置實參,溢位的位置實參會被*儲存為元組的形式,然後賦值給
*後面的形參名
*後可以跟任意名字,但是約定俗成使用args
# 混合使用def func(x,y,*z): # z =(3,4,5,6)
print(x,y,z)
func(1,2,3,4,5,6)
# 單一使用*def my_sum(*args):
res=0
for item in args:
res+=item
return res
res=my_sum(1,2,3,4,)
print(res)
的實參使用:
實參中帶
*的,先
*後的值會被打散成位置實參
def func(x,y,z):*print(x,y,z)
func(*[11,22,33]) # func(11,22,33)
func(*[11,22]) # func(11,22) # error
l=[11,22,33]
func(*l)
在實參和形參中的混合使用
def func(x,y,*args): # args=(3,4,5,6)**print(x,y,args)
func(1,2,[3,4,5,6])
func(1,2,*[3,4,5,6]) # func(1,2,3,4,5,6)
func(*'hello') # func('h','e','l','l','o')
的使用(適用長度可變的關鍵字引數)**
的形參名:用來接收溢位的關鍵字實參,**會將溢位的關鍵字實參儲存成字典格式,然後賦值給緊跟其後的形參名,**
後跟的可以是任意名字,但是約定俗成應該是kwargs。**
用在實參中(**
後只能跟字典),實參中帶**
會被打傘成關鍵字實參的形式。
def func(x,y,z):錯誤示範:print(x,y,z)
func(*) # func('x','y','z')
func(**) # func(x=1,y=2,z=3)
def func(x,y,z):*print(x,y,z)
func(**) # func(x=1,y=2) --->少參
func(**) # func(x=1,a=2,z=3) --->不對應
*的混用(實參與形參)
def func(x,y,**kwargs):*與print(x,y,kwargs)
func(y=222,x=111,a=333,b=444)
func(**)
# 兩種結果相同
# 111 222
**的混合使用
注意:*args必須在**kwargs之前。
def func(*args,**kwargs):混合呼叫:print(args)
print(kwargs)
func(1,2,3,4,5,6,7,8,x=1,y=2,z=3)
def index(x,y,z):print('index=>>> ',x,y,z)
#args=(1,) kwargs=
index(*args,**kwargs)
index(*(1,),**)
index(1,z=3,y=2)
# 原格式---》彙總-----》打回原形
了解知識點:
1.命名關鍵字引數
在定義函式時,*後定義的引數,如下所示,稱之為命名關鍵字引數
特點:命名關鍵字實參必須按照key=value的形式為其傳值
def func(x,y,*,a,b): # 其中,a和b稱之為命名關鍵字引數print(x,y)
print(a,b)
# func(1,2,b=222,a=111)
2.混合使用
形參混用的順序:位置新參,預設形參,*args,命名關鍵字形參,**kwargs
def func(x,y=111,*args,z,**kwargs):print(x)
print(y)
print(args)
print(z)
print(kwargs)
一般的傳參形式:
func(1)
func(x=1)
func(1,x=1)
func(*'hello')
func(**{})
func(*'hell',**{})
Python函式引數總結
作為乙個沒有系統學習過python,卻要與之日日相對看原始碼的人,真尼瑪痛苦啊。經常看到 kws之類的,心中狂虐 這啥?指標的指標?t t 昨天看 python核心程式設計 的時候,剛好看到了函式部分,於是順勢將目前接觸到的集中引數型別都總結一下吧 總的來說,除去普通的normal args,pyt...
c 函式引數(總結)
形參出現在被調函式當中,在整個函式體內都可以使用。形參在定義時編譯系統並不分配儲存空間,只有在呼叫該函式時才分配記憶體單元。呼叫結束記憶體單元被釋放,故形參只有在函式呼叫時有效,呼叫結束時不能再使用。實參出現在主調函式當中,當函式呼叫時,主調函式把實參的值傳送給被調函式的形參,從而實現函式間的資料傳...
python 函式引數 簡明總結
1.位置引數 必選引數 2.預設引數 3.可變引數 args 4.關鍵字引數 kw 5.命名關鍵字引數 named kw 可變引數 def func args type args tuple func 1,2,3,4 mytuple 1 2,3 func mytuple 允許傳入0個或任意個引數,這...