目錄可變長度的引數(*與**的用法)
形參:在定義函式階段定義的引數稱之為形式引數,簡稱形參,相當於變數名
def func(x, y): # x=1,y=2
print(x, y)
實參:在呼叫函式階段傳入的值稱之為實際引數,簡稱實參,相當於變數值
func(1,2)
形參與實參的關係:
1、在呼叫階段,實參(變數值)會繫結給形參(變數名)
2、這種繫結關係只能在函式體內使用
3、實參與形參的繫結關係在函式呼叫時生效,函式呼叫結束後解除繫結關係
實參是傳入的值,但值可以是以下形式
# 形式一:
# func(1,2)
## 形式二:
# a=1
# b=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,3) # 報錯 多了乙個值
# func(1,)# 報錯 少了乙個值
func(1,2)
位置實參:在函式呼叫階段, 按照從左到右的順序依次傳入的值
特點:按照順序與形參一一對應
# func(1,2)
# func(2,1)
關鍵字實參:在函式呼叫階段,按照key=value的形式傳入的值
特點:指名道姓給某個形參傳值,可以完全不參照順序
def func(x,y):
print(x,y)
func(y=2,x=1) # 1,2 這裡的y,x是形參裡的y,x
func(1,2) # 1,2
func(2,1) # 2,1
x = 1
y = 2
func(y,x) # 2,1 這裡的y,x取的是你外面定義的x,y 與形參裡的x,y不是乙個
位置實參必須放在關鍵字實參前
def func(x,y):
print(x,y)
func(1,y=2)
func(y=2,1) # 報錯 原因:位置引數跟在關鍵字引數後面
不能能為同乙個形參重複傳值
def func(x,y):
print(x,y)
func(1,y=2,x=3) # 報錯
func(1,2,x=3,y=4) # 報錯
預設形參:在定義函式階段,就已經被賦值的形參,稱之為預設引數
特點:在定義階段就已經被賦值,意味著在呼叫階段可以不用為其賦值
def func(x,y=3):
print(x,y)
func(x=1)
func(x=1,y=44444) # 可以不用給y賦值 ,給y賦值了就變成賦值後的值
位置形參必須在預設形參的左邊
預設引數的值是在函式定義階段被賦值的,準確地說被賦予的是值的記憶體位址
# 示範1:
m=22
def func(x,y=m): # y=>2的記憶體位址
print(x,y)
# m=3333333333333333333 # 沒用 會報錯 找不到m
func(1)
# 示範2:
m = [111111, ]
def func(x, y=m): # y=>列表[111111, ]的記憶體位址
print(x, y)
func(1)
雖然預設值可以被指定為任意資料型別,但是不推薦使用可變型別
函式最理想的狀態:函式的呼叫只跟函式本身有關係,不受外界**的影響
可變長度指的是在呼叫函式時,傳入的值(實參)的個數不固定
而實參是用來為形參賦值的,所以對應著,針對溢位的實參必須有對應的形參來接收
i:形參名:用來接收溢位的位置實參,溢位的位置實參會被儲存成元組的格式然後賦值緊跟其後的形參名
*後跟的可以是任意名字,但是約定俗成應該是args
def func(x,y,*z): # z =(3,4,5,6)
print(x,y,z)
func(1,2,3,4,5,6) # 1 2 (3, 4, 5, 6)
def my_sum(*args):
res=0
for item in args:
res+=item
return res # 10
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) # 11 22 33
iii:形參與實參中都帶*
def func(x,y,*args): # args=(3,4,5,6)
print(x,y,args)
func(1,2,[3,4,5,6]) # 1 2 ([3, 4, 5, 6],)
func(1,2,*[3,4,5,6]) # func(1,2,3,4,5,6) # 1 2 (3, 4, 5, 6)
func(*'hello') # func('h','e','l','l','o') # h e ('l', 'l', 'o')
i:****形參名:用來接收溢位的關鍵字實參,會將溢位的關鍵字實參儲存成字典格式,然後賦值給緊跟其後的形參名
**後跟的可以是任意名字,但是約定俗成應該是kwargs
def func(x,y,**kwargs):
print(x,y,kwargs)
func(1,y=2,a=1,b=2,c=3) #1 2
ii:可以用在實參中(後跟的只能是字典),實參中帶,先後的值打散成關鍵字實參
def func(x,y,z):
print(x,y,z)
func(*) # func('x','y','z')# x y z
func(**) # func(x=1,y=2,z=3) #1 2 3
iii: 形參與實參中都帶**
def func(x,y,**kwargs):
print(x,y,kwargs)
func(y=222,x=111,a=333,b=444)
func(**)
# 111 222
# 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)
# (1, 2, 3, 4, 5, 6, 7, 8)
#
def index(x,y,z):
print('index=>>> ',x,y,z) #index=>>> 1 2 3
# index(*args,**kwargs)
index(*(1,),**)
index(1,z=3,y=2)
## 原格式---》彙總-----》打回原形
# index=>>> 1 2 3
# index=>>> 1 2 3
# index=>>> 1 2 3
python入門之函式與引數
import time defwrite time time format y m d x time current time.strftime time format with open information a as f f.write current time s n time curren...
python 函式引數 和 的使用
單個星號 1 parameter 是用來接受任意多個引數並將其放在乙個元組中。如 def demo params for param in params print param a 1 b 2,3 demo a,b 輸出為 1 2,3 2 函式在呼叫多個引數時,在列表 元組 集合 字典及其他可迭代物...
Python 基礎 函式的使用 引數
在宣告函式時,如果有一些引數是執行時的必要條件,或者說在編寫的過程中大量出現,則可以把它設為預設值引數。呼叫函式時,如果沒有傳入對應的實參值,則函式使用宣告時則使用預設值引數。def babble words,time 1 print word time 對babble 進行呼叫 babble he...