可變長引數

2021-10-04 06:27:23 字數 2318 閱讀 2849

可變長引數:指的是在呼叫函式時,傳入的引數個數可以不固定

呼叫函式時,傳值的方式無非兩種,一種是位置實參,另一種是關鍵字實參,因此形參也必須得有兩種解決方法,以此來分別接收溢位的位置實參(*)與關鍵字實參(**)

形參中的會將溢位的位置實參全部接收,然後儲存元組的形式,然後把元組賦值給後的引數。需要注意的是:*後的引數名約定俗成為args。

def

sum_self

(*args)

: res =

0for num in args:

res += num

return res

res = sum_self(1,

2,3,

4)print

(res)

10

實參中的*,會將後引數的值迴圈取出,打散成位置實參。以後但凡碰到實參中帶*的,它就是位置實參,應該馬上打散成位置實參去看。

def

func

(x, y, z,

*args)

:print

(x, y, z, args)

func(1,

*(1,

2),3

,4)1

12(3

,4)

形參中的會將溢位的關鍵字實參全部接收,然後儲存字典的形式,然後把字典賦值給後的引數。需要注意的是:**後的引數名約定俗成為kwargs。

def

func

(**kwargw)

:print

(kwargw)

func(a=5)

實參中的**,會將後引數的值迴圈取出,打散成關鍵字實參。以後但凡碰到實參中帶**的,它就是關鍵字實參,應該馬上打散成關鍵字實參去看。

def

func

(x, y, z,

**kwargs)

:print

(x, y, z, kwargs)

func(1,

3,4,

**)13

4

def

index

(name, age, ***)

:print

(f"name: , age: , ***: "

)def

(*args,

**kwargs)

:print

(f"args: "

)print

(f"kwargs: "

) index(

*args,

**kwargs)

'nick'

, ***=

'male'

, age=19)

args:()

kwargs:

name: nick, age:

19, ***: male

現在有乙個需求:函式的使用者必須按照關鍵字實參傳。

def

register

(x, y,

**kwargs):if

'name'

notin kwargs or

'age'

notin kwargs:

print

('使用者名稱和年齡必須使用關鍵字的形式傳值'

)return

print

(kwargs[

'name'])

print

(kwargs[

'age'])

register(1,

2, name=

'nick'

, age=19)

nick

19

命名關鍵字形參:在函式定義階段,*後面的引數都是命名關鍵字引數。

特點:在傳值時,必須按照key=value的方式傳值,並且key必須命名關鍵字引數的指定的引數名。

def

register

(x, y,

*, name, gender=

'male'

, age)

:print

(x)print

(age)

register(1,

2, x=

'nick'

, age=19)

# typeerror: register() got multiple values for argument 'x'

可變長引數

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

可變長引數

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

可變長引數

可變長引數 指的是在呼叫函式時,傳入的引數個數可以不固定 呼叫函式時,傳值的方式無非兩種,一種是位置實參,另一種是關鍵字實參,因此形參也必須得有兩種解決方法,以此來分別接收溢位的位置實參 與關鍵字實參 可變長引數 args會接受多於的位置實參,盡量不使用其他的變數名,而應該使用args,args是約...