Python * and **到底是什麼呢?(多值引數)
阿新 • • 發佈:2018-12-02
多值引數
定義支援多值引數的函式
-
有時可能需要 一個函式 能夠處理的引數 個數 是不確定的,這個時候,就可以使用 多值引數
-
python
中有 兩種 多值引數:- 引數名前增加 一個
*
可以接收 元組 - 引數名前增加 兩個
*
可以接收 字典
- 引數名前增加 一個
-
一般在給多值引數命名時,習慣使用以下兩個名字
*args
—— 存放 元組 引數,前面有一個*
**kwargs
—— 存放 字典 引數,前面有兩個*
-
args
是arguments
的縮寫,有變數的含義 -
kw
keyword
的縮寫,kwargs
可以記憶 鍵值對引數
def demo(num, *args, **kwargs):
print(num)
print(args)
print(kwargs)
demo(1, 2, 3, 4, 5, name="小明", age=18, gender=True)
提示:多值引數 的應用會經常出現在網路上一些大牛開發的框架中,知道多值引數,有利於我們能夠讀懂大牛的程式碼
多值引數案例 —— 計算任意多個數字的和
需求
- 定義一個函式
sum_numbers
,可以接收的 任意多個整數 - 功能要求:將傳遞的 所有數字累加 並且返回累加結果
def sum_numbers(*args):
num = 0
# 遍歷 args 元組順序求和
for n in args:
num += n
return num
print(sum_numbers(1, 2, 3))
元組和字典的拆包
- 在呼叫帶有多值引數的函式時,如果希望:
- 將一個 元組變數,直接傳遞給
args
- 將一個 字典變數,直接傳遞給
kwargs
- 將一個 元組變數,直接傳遞給
- 就可以使用 拆包,簡化引數的傳遞,拆包 的方式是:
- 在 元組變數前
*
- 在 字典變數前,增加 兩個
*
- 在 元組變數前
def demo(*args, **kwargs):
print(args)
print(kwargs)
# 需要將一個元組變數/字典變數傳遞給函式對應的引數
gl_nums = (1, 2, 3)
gl_xiaoming = {"name": "小明", "age": 18}
# 會把 num_tuple 和 xiaoming 作為元組傳遞個 args
# demo(gl_nums, gl_xiaoming)
demo(*gl_nums, **gl_xiaoming)