形參:在定義函式階段定義的引數稱之為形式引數,簡稱形參,相當於變數名
def func(x, y): # x=1,y=2
print(x, y)
實參:在呼叫函式階段傳入的值稱之為實際引數,簡稱實參,相當於變數值(func(1,2))
形參與實參的關係:
1、在呼叫階段,實參(變數值)會繫結給形參(變數名)
2、這種繫結關係只能在函式體內使用
3、實參與形參的繫結關係在函式呼叫時生效,函式呼叫結束後解除繫結關係
實參是傳入的值,但值可以是以下形式:
# 形式一:
func(1,2)
# 形式二:
a=1b=2
func(a,b)
# 形式三:
func(int('1'),2)
func(func1(1,2,),func2(2,3),333)
位置形參:在函式定義階段,按照從左到右的順序直接定義的"變數名"
特點:必須被傳值,多乙個不行少乙個也不行
def func(x,y):
print(x,y)
func(1,2)
func(1,2,3) #錯誤
func(1,) #錯誤
位置實參:在函式呼叫階段, 按照從左到有的順序依次傳入的值
特點:按照順序與形參一一對應
func(1,2)
func(2,1)
關鍵字實參:在函式呼叫階段,按照key=value的形式傳入的值
特點:指名道姓給某個形參傳值,可以完全不參照順序
def func(x,y):
print(x,y)
func(y=2,x=1)
func(1,2)
混合使用,強調1、位置實參必須放在關鍵字實參前
func(1,y=2)
func(y=2,1) #錯誤
2、不能能為同乙個形參重複傳值
func(1,y=2,x=3) #錯誤
func(1,2,x=3,y=4) #錯誤
預設形參:在定義函式階段,就已經被賦值的形參,稱之為預設引數
特點:在定義階段就已經被賦值,意味著在呼叫階段可以不用為其賦值
def func(x,y=3):
print(x,y)
# func(x=1) ==> 1 3
func(x=1,y=44444) # 1 44444
def register(name,age,gender='男'):
print(name,age,gender)
register('三炮',18)
register('二炮',19)
register('大炮',19)
register('沒炮',19,'女')
位置形參與預設形參混用,強調:1、位置形參必須在預設形參的左邊
def func(y=2,x):
pass
2、預設引數的值是在函式定義階段被賦值的,準確地說被賦予的是值的記憶體位址
# 示範1:
m=2def func(x,y=m): # y=>2的記憶體位址
print(x,y)
m=3333333333333333333
func(1)
# 輸出值為 1 2
# 示範2:
m = [111111, ]
def func(x, y=m): # y=>[111111, ]的記憶體位址
print(x, y)
func(1)
# 輸出值為 1 [111111, 3333333]
m = [111111, ]
def func(x, y=m):
print(x, y)
func(1)
func(2)
func(3)
# 1 [111111, 3333333, 444444, 5555]
# 2 [111111, 3333333, 444444, 5555]
# 3 [111111, 3333333, 444444, 5555]
# ****************************************=
def func(x,y,z,l=none):
if l is none:
l=print(l)
func(1,2,3)
func(4,5,6)
new_l=[111,222]
func(1,2,3,new_l)
# [1, 2, 3]
# [4, 5, 6]
# [111, 222, 1, 2, 3]
可變長度指的是在呼叫函式時,傳入的值(實參)的個數不固定,而實參是用來為形參賦值的,所以對應著,針對溢位的實參必須有對應的形參來接收。
i:* 形參名:用來接收溢位的位置實參,溢位的位置實參會被*儲存成元組的格式然後賦值緊跟其後的形參名
*後跟的可以是任意名字,但是約定俗成應該是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)
ii: 可以用在實參中,實參中帶,先*後的值打散成位置實參
def func(x,y,z):
print(x,y,z)
# func(*[11,22,33]) # func(11,22,33)
# func(*[11,22]) # func(11,22)
l=[11,22,33]
func(*l)
iii: 形參與實參中都帶*
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')
i:** 形參名:用來接收溢位的關鍵字實參,**會將溢位的關鍵字實參儲存成字典格式,然後賦值給緊跟其後的形參名
def func(x,y,**kwargs):
print(x,y,kwargs)
func(1,y=2,a=1,b=2,c=3)
ii: ** 可以用在實參中 (** 後跟的只能是字典),實參中帶** ,先**後的值打散成關鍵字實參
def func(x,y,z):
print(x,y,z)
func(*) # func('x','y','z')
func(**) # func(x=1,y=2,z=3)
錯誤func(**) # func(x=1,y=2)
func(**) # func(x=1,a=2,z=3)
iii: 形參與實參中都帶**
def func(x,y,**kwargs):
print(x,y,kwargs)
func(y=222,x=111,a=333,b=444)
func(**)
混用* 與 ** : * args必須在**kwargs之前
def func(x,*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)
index(*args,**kwargs)
# index(*(1,),**)
# index(1,z=3,y=2)
# 原格式---》彙總-----》打回原形
Python之函式的引數
二 在python中引數的種類 2 關鍵字實參 3 預設形參 在定義函式時,括號內定義的變數名,稱之為形式引數,簡稱形參 變數名 def func x,y x 1y 2 print x print y 在呼叫函式時,括號內傳入的值,稱之為實際引數,簡稱實參 變數值 func 1,2 在函式定義階段按...
Python之函式 引數
defpower x x就是乙個位置引數 return x x power 3 9 defpower x n 2 n即是預設引數,函式定義時傳入預設值 s 1 while n 0 n n 1 s s x return s power 2 函式呼叫時可以不傳入n的值,此時n即為預設值2 4 power...
Python函式之引數
1.預設形參 可以讓呼叫者有選擇地傳遞需要的資料,不寫引數則使用預設值 def functionname parameter1 defaultvalue1 functionbody e.g.deffun01 a,b,c 0 print a print b print c 2.位置形參 1 個數限定 ...