6.3 函數(shù)參數(shù)的應(yīng)用與可變長參數(shù)
6.3 函數(shù)參數(shù)的應(yīng)用與可變長參數(shù)
6.3.1 函數(shù)參數(shù)的應(yīng)用
- 函數(shù)分為兩個(gè)階段
- 定義階段:定義階段的x,y稱為形參,形參應(yīng)具有描述意義,不為具體數(shù)據(jù)類型。
- 調(diào)用階段:調(diào)用階段的x,y稱為實(shí)參,實(shí)參必須有值,是具體的數(shù)據(jù)類型。
- 形參與實(shí)參關(guān)系:形參接收實(shí)參
def self_max(x,y): #形參
#參數(shù)無提示,應(yīng)具有描述意義 例如num1,num2
if x > y:
return x
return y
self_max(10,20)
def guess_age(age): #缺點(diǎn):每次都要傳參,因此可以設(shè)置默認(rèn)形參
inp_age=input()
if age==inp_age:
print('y')
else:
print('n')
guess_age(18)
- 形參(函數(shù)定義階段)
-
默認(rèn)形參:用于形參經(jīng)常是同一個(gè)值的函數(shù)。值不需要改變,在定義階段,提前賦值給形參;實(shí)參傳值的時(shí)候,實(shí)參傳的值會(huì)覆蓋默認(rèn)值,經(jīng)常使用。
-
位置形參:按從左到右位置接收實(shí)參的形參。
-
位置先后順序:默認(rèn)形參必須在位置形參后面。
def guess_age(age=18): #設(shè)置默認(rèn)形參
inp_age=int(input())
if age==inp_age:
print('y')
else:
print('n')
guess_age(20) #實(shí)參20被傳入會(huì)覆蓋默認(rèn)形參age原來的值,age=20
# 默認(rèn)形參必須在位置形參后面
def self_max(x,y,z=5): #x,y位置形參,z:默認(rèn)形參
# or (x,y=5,z=10)√、(x=5,y,z=20)×
return x,y,z
print(self_max(10,1,3))
#輸出:(10, 1, 3)
- 實(shí)參(函數(shù)調(diào)用階段)
- 關(guān)鍵字實(shí)參
- 適用場景:適用于函數(shù)參數(shù)較多的情況,可以打亂位置,但關(guān)鍵字實(shí)參必須在位置實(shí)參后面。
- 運(yùn)用方法:在函數(shù)調(diào)用階段找到與形參的對(duì)應(yīng)關(guān)系,并賦值給對(duì)應(yīng)的形參
- 關(guān)鍵字實(shí)參名:形參名為什么,則關(guān)鍵字實(shí)參名也必須是什么
- 位置實(shí)參:傳給形參,默認(rèn)按照從左到右順序。
- 位置先后順序:關(guān)鍵字實(shí)參必須在位置實(shí)參后面。
def self_max(x,y):
if x>y:
return x
else:
return y
x=self_max(10,20) #位置實(shí)參,傳參默認(rèn)按照順序
result=self_max(y=10,x=20) #關(guān)鍵字傳參
print(result)
def self_max(x,y,z):
print(x,y,z)
self_max(10,10,z=3)# 關(guān)鍵字實(shí)參必須在位置實(shí)參后面
6.3.2 可變長參數(shù)
參數(shù)多時(shí),使用關(guān)鍵字參數(shù),但還是較麻煩。
- 可變長形參(函數(shù)定義階段)
-
*args:在函數(shù)定義階段,接收所有位置實(shí)參,不接收關(guān)鍵字實(shí)參。
-
**kwargs:在函數(shù)定義階段,接收所有關(guān)鍵字實(shí)參,以字典形式保存下來。
-
命名規(guī)范:
- *a、**b 也是可以的
- 但 *args、**kwargs 是約定俗稱的一種規(guī)范。
def self_max(*args): #*args接收所有位置參數(shù)
print(args,type(args))
self_max(1,2,3,5,6,8,8)
def self_max(*args,**kwargs): #**kwargs 接收所有關(guān)鍵字實(shí)參,以字典形式保存下來{'x':8,'y':20}
print(args,type(args))
print(kwargs,type(kwargs))
self_max(1,2,3,5,6,8,8,x=8,b=20)
- 可變長實(shí)參(函數(shù)調(diào)用階段)
- *args:
- *把這個(gè)元組內(nèi)的元素取出來,然后按位置對(duì)應(yīng)傳給位置形參。(這個(gè)過程也是解壓縮的過程)
- 對(duì)默認(rèn)參數(shù)也有效,取出的值可以覆蓋默認(rèn)參數(shù)。
- **kwargs:
- 會(huì)把字典打散成鍵值對(duì)的形式作為實(shí)參傳給關(guān)鍵字形參。
def self_max(a,b,c,d,e,f):
print(a,b,c,d,e,f)
a=(1,2,3,4,5,6)
self_max(*a)
# self_max(*a)=self_max(1,2,3,4,5,6)
def self_max(a,b,c,d,e,f,g=1,h=3):
print(a,b,c,d,e,f,g,h)
a=(1,2,3,4,5,6)
b={'g':8,'h':9}
self_max(*a,**b)
# self_max(**b)相當(dāng)于self_max(g=8,h=9)
# self_max(*a,**b):相當(dāng)于self_max(1,2,3,4,5,6,g=8,h=9)
def self_max(a,b,c,d,e,f,g=1,h=3):
print(a,b,c,d,e,f,g,h)
a=(1,2,3,4,5,6,7)
self_max(*a) #對(duì)默認(rèn)參數(shù)也有效,取出的值可以覆蓋默認(rèn)參數(shù)。
def self_max(*args,**kwargs): #能接收全部實(shí)參
print(args)
print(kwargs)
a=(1,2,3,4,5,6)
b={'g':8,'h':9}
self_max(*a,**b)
浙公網(wǎng)安備 33010602011771號(hào)