24.函數(3)----參數

函數的參數分爲形參和實參
形參:函數定義時定義的參數叫做形參,相當於變量名
實參:函數調用時傳遞的參數叫做實參,相當於變量值

形參和實參的關係:

  1. 函數調用時,實參(變量值的內存地址)綁定形參(變量名)
  2. 上述綁定關係只能在函數體內調用
  3. 綁定關係在函數調用時生效,函數調用結束後解除綁定關係

一.形參

1.位置參數

位置形參:按照從左到右的順序依次定義的變量名
特點:必須傳參,多一個少一個都不行

示例代碼1:

def func(x,y):
	print(x,y)
func(1,2)							結果爲:1,2

示例代碼2:

def func(x,y):
	print(x,y)
func(1)	

結果爲:
y沒有傳值在這裏插入圖片描述

示例代碼3:

def func(x,y):
	print(x,y)
func(1,2,3)	

結果爲:

需要兩個但是我們傳了三個
在這裏插入圖片描述

2.默認值參數

默認值參數也叫默認值形參,以key=value的形式在函數定義階段給形參賦值
特點:默認值參數可以不傳參,默認值最好是一個不可變類型

示例代碼1:

def func(x,y=1):
	print(x,y)
func(1,2)							結果爲:1,2
func(1)								結果爲:1,1

示例代碼2:

a = "哈哈哈"
def func(x,y=a):
	print(x,y)
a = "呵呵呵"
func(1)								結果爲:1,哈哈哈

結果與我們想象相同,因爲a是一個不可變類型,函數外的代碼不會對a產生影響,也就不會影響函數的結果。

示例代碼3:

a = [1]
def func(x,y=a):
    print(x,y)
a.append(2)
func(1)								結果爲:1,[1,2]

我們理想中y的值應該是[1,2],但是a是一個可變類型,函數體外的代碼影響了a,即影響了函數的結果,這不算一個合格的函數。
如果a是一個不可變類型就不會出現類型的情況,所以默認值最好爲不可變類型。

3.動態參數

動態參數也叫動態形參,當實參的個數不確定時,我們就需要可變長度的形參來接受實參

1.瞭解 * 和 **

 *** 在形參表示聚合,*將位置參數聚合成元組,**將位置參數聚合成字典
 *** 在實參表示打散,*將可迭代對象打散成多個位置參數,**將字典打散爲多個關鍵字參數

2.*args

*args是動態的位置參數,可以接受不定長的位置參數,將多個位置參數聚合成元組
ps:*args的參數名是args,*只是聚合的作用

def func(*args):
	print(args)   
func(1,2,3,4)					結果爲:(1,2,3,4)

3.**kwargs

**kwargs與*args類似,只不過是接受不定長的關鍵字參數,將多個關鍵字參數聚合成字典

def func(**kwargs):
	print(kwargs)
func(a=1,b=2,c=3)   			結果爲:{"a":1,"b":2,"c":3}

4.無敵傳參

def func(*args,**kwargs):
	...

這樣定義的函數無論多少個位置參數和關鍵字參數都可以接受

5.參數順序:
位置形參,動態位置形參,默認值形參,**kwargs

實例代碼1:

def func(*args,a):
	print(args,a)
func(1,2,3)							會報錯,因爲args是動態的,將所有的位置參數接受完了,a就接收不到值,所以位置參數必須放在*args後

在這裏插入圖片描述
實例代碼2:

def func(**kwargs,a=1):
	print(kwargs,a)
func(a=1,b=2,c=3)     			    會報錯,語法錯誤,默認值參數和位置參數不能放在**kwargs後

5.總結

  1. args是arguments(參數),kwargs是keyword arguments(關鍵字參數),當然這兩個名稱可以是別的,但是約定俗稱我們使用這兩個。
  2. 形參順序: func(位置參數,**args,默認值參數,**kwargs)

二.實參

1.位置參數

位置實參:按照從左到右的順序依次給形參傳值
特點:按照順序與形參一一對應

def func(x,y):
	print("x:",x)
	print("y:",y)
func(1,2)							結果爲:x:1 y:2

2.關鍵字參數

關鍵字參數也叫關鍵字實參,以key=vlaue的形式給形參傳值
特點:

  1. 指名道姓的給形參傳值,不受順序的影響
  2. 如果和位置實參混用,必須放在位置實參的後面
  3. 不能給一個形參重複傳值

示例代碼1:

def func(x,y):
	print(x,y)
func(x=1,y=2)					    結果爲:1,2
func(y=1,x=2)						結果爲:2,1

示例代碼2:

def func(x,y):
	print(x,y)
func(1,y=3)						    結果爲:1,3

示例代碼3:

def func(x,y):
	print(x,y)
func(x=3,1)	

結果爲:
語法錯誤,關鍵字參數必須跟在位置參數後在這裏插入圖片描述
示例代碼4:

def func(x,y):
	print(x,y)
func(1,x=2)

結果如下:
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章