1. 程式人生 > >Python * and **到底是什麼呢?(多值引數)

Python * and **到底是什麼呢?(多值引數)

多值引數

定義支援多值引數的函式

  • 有時可能需要 一個函式 能夠處理的引數 個數 是不確定的,這個時候,就可以使用 多值引數

  • python 中有 兩種 多值引數:

    • 引數名前增加 一個 * 可以接收 元組
    • 引數名前增加 兩個 * 可以接收 字典
  • 一般在給多值引數命名時,習慣使用以下兩個名字

    • *args —— 存放 元組 引數,前面有一個 *
    • **kwargs —— 存放 字典 引數,前面有兩個 *
  • argsarguments 的縮寫,有變數的含義

  • 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)

提示:多值引數 的應用會經常出現在網路上一些大牛開發的框架中,知道多值引數,有利於我們能夠讀懂大牛的程式碼

多值引數案例 —— 計算任意多個數字的和

需求

  1. 定義一個函式 sum_numbers,可以接收的 任意多個整數
  2. 功能要求:將傳遞的 所有數字累加 並且返回累加結果
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)