可變長引數

2022-05-05 00:45:09 字數 1712 閱讀 5074

# 可變長引數

# 站在呼叫函式傳遞實參的角度 實參的個數不固定的情況

# 也就意味形參也不固定

# 站在形參的角度 可以用*和**來接收多餘的(溢位的)位置引數和關鍵字引數

# 站在形參的角度 看 *

# 形參中的*會將多餘的(溢位的)位置實參 統一用元組的形式處理 傳遞給*後面的形參名

# def func(x,y,*z):

# print(x,y,z) # z = (3, 4, 5, 6, 7, 8, 54, 43, 4, 5, 6, 6, 7, 8)

# func(1,2,3,4,5,6,7,8,54,43,4,5,6,6,7,8,)

# 站在實參的角度 看 *

# def func(x,y,z):

# print(x,y,z)

# # l = [1,2,3]

# # a,b,c = l

# # func(a,b,c)

# # func(*[1,2,3,4,5,6]) # *會將列表打散成位置實參一一傳入等價於func(1,2,3,4,5,6)

# func(*(1,2,3)) # 等價於func(1,2,3)

# def func(x,*z):

# print(x,z)

# func(1,*) # *在形參中只能接收多餘的位置實參 不能接收關鍵字實參

# *只能將列表 元組 集合 字串

# *的內部你可以看成是for迴圈

# 站在形參的角度看 **

# def func(x,y,**z):

# print(x,y,z) # z =

# func(x=1,y=2,z=1,a=1,b=2,c=3)

# **會接收所有多餘的關鍵字引數 並將關鍵字引數 轉換成字典的形式 字典的key就是關鍵字的名字

# 字典的value就是關鍵字的名字指向的值 將字典交給**後面的變數名

# 站在實參的角度看 **

def func(x,y,z):

print(x,y,z)

# func(12,3,4)

# func(x=1,y=2,z=3)

# d =

# func(x=1,y=2,z=3)

# func(**d) # 等價於func(x=1,y=2,z=333)

# **會將字典拆封成 key = value的形式

"""總結 * 與 **

*在形參中能夠接受多餘的位置引數 組織成乙個元祖賦值給*後面的變數名

**在形參中能夠接受多餘的關鍵字引數 組織成乙個字典賦值給**後面的變數名

*:在實參中 *能夠將列表 元祖 集合 字串 打散成位置實參的形式傳遞給函式

(*就看成是for迴圈取值)

**:在實參中 能將字典打散成key = value的形式 按照關鍵字引數傳遞給函式

"""# 需求 你寫的函式 無論呼叫者按照正確傳參的方式無論怎麼傳 你的函式都能夠正常執行

# def func1(*x,**y):

# print(x,y)

# func1(1,2,3,4,5,6,x=1,y=2,z = 3)

"""注意python推薦形參*和**通用的寫法

"""def func2(*args,**kwargs):

print(args,kwargs)

func2(1,2,3,4,5,6,x=1,y=2,z = 3)

可變長引數

由於在c語言中沒有函式過載,解決不定數目函式引數問題變得比較麻煩,即使採用c 如果引數個數不能確定,也很難採用函式過載。對這種情況,提出了指標引數來解決問題。如printf 函式,其原型為 int printf const char format,它除了有乙個引數format固定以外,後面跟的引數的...

可變長引數

可變長引數 指的是在呼叫函式時,傳入的引數個數可以不固定 呼叫函式時,傳值的方式無非兩種,一種是位置實參,另一種是關鍵字實參,因此形參也必須得有兩種解決方法,以此來分別接收溢位的位置實參 與關鍵字實參 形參中的會將溢位的位置實參全部接收,然後儲存元組的形式,然後把元組賦值給後的引數。需要注意的是 後...

可變長引數

可變長引數 public class demo06 double.numbers 為可變長引數,如果有多個引數,那麼可變長引數只能放在最後,否則會出錯 在指定引數型別後加乙個省略號 則此引數為可變引數 乙個方法中只能指定乙個可變引數,它必須是方法的最後乙個引數,任何普通的引數必須在它之前宣告 pub...