python 函數中參數列表的 *,**,/ 是什么意思?


基本參數傳遞要求:

當給一個函數傳遞參數時,如果其中一個使用了關鍵字參數傳參,則在該參數后必須都是關鍵字參數,在第一個關鍵字參數之前,都是以位置參數傳參。

def test(a, b, c, d):
    print(a, b, c, d)

    
# 錯誤示范,在b=2之后,都必須是關鍵字穿參,不然后面的參數無法知道對應到列表中那個參數
# test(1, b=2, 3, 4)

/ 符號作為占位符的作用

/ 符號之前的所有參數,都必須以位置參數穿參,不可以關鍵字參數傳參

def test2(a, /, b, c, d):
    print(a, b, c, d)


# 錯誤示范
test2(a=0, b=1, c=3, d=4)
# 正確示范,a不可根據關鍵字方式傳參
test2(0, b=1, c=3, d=4)

* 符號作為占位符的作用

*** 符號之后的所有參數,都必須以關鍵字方式傳參,不得以位置方式傳參**

def test3(a, b, *, c, d):
    print(a, b, c, d)


# 錯誤示范
test3(0, 1, 3, d=4)
# 正確示范,c不可根據位置方式傳參
test3(0, 1, c=3, d=4)

總結:

  • 在 * 號之后 => 關鍵字參數傳參
  • 在 / 號之前 => 位置參數傳參
  • 如果 * 出現在 / 之前,會報錯,因為在 * 和 / 之間存在矛盾
# 錯誤定義 SyntaxError: invalid syntax /
def test5(a, *, b, /, c, d):
    print(a, b, c, d)
def test4(a, /, b, *, c, d):
    print(a, b, c, d)


# 錯誤示范
test4(0, 1, 3, d=4)
# 正確示范,b位置不作限制
test4(0, b=1, c=3, d=4)

在參數的前面帶有 * , ** 的作用

有時候會發現有些函數中,某些參數前面帶有 * 或者 **,* 表示該參數是一個數組,** 表示該參數是一個字典。

def test6(a, b, *c, d):
    print(a, b, c, d)


# *c 之前的 a b 都是位置參數,從 3 開始以后都是 *c,關鍵字 d=4 才是給 d 賦值
test6(1, 2, 3, 4, 5, 6, d=4)  # 1 2 (3, 4, 5, 6) 4
def test7(a, b, c, **d):
    print(a, b, c, d)


# 注意:后面的 e=5, r=4 的 key 不得和前面的關鍵字重復
test7(1, 2, 3, e=5, r=4)  # 1 2 3 {'e': 5, 'r': 4}
def test8(a, *b, c, **d):
    print(a, b, c, d)


# a 是位置參數,*b 是列表,c 是關鍵字參數,**d 是字典參數
test8(1, 2, 3, c=0, e=5, r=4)  # 1 (2, 3) 0 {'e': 5, 'r': 4}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM