Python的兩個特殊的參數前綴 * 和 **

先看看官方的解釋吧

keyword argumen: an argument preceded by an identifier (e.g. name=) in a function call or passed as a value in a dictionary preceded by **.

positional argument: an argument that is not a keyword argument. Positional arguments can appear at the beginning of an argument list and/or be passed as elements of an iterable preceded by *.

翻譯一下

  • 兩個星號(**)開頭的參數,叫做“關鍵字參數”,在函數調用中,參數前有標識符(例如:name=);或者是把字典類型的值作為參數傳遞(在字典前出現)。

  • 一個星號(*)開頭的參數,叫做“位置參數”,不是關鍵字參數。位置參數可以出現在參數列表中的起始位置,或者把可迭代類型的值作為參數傳遞(在可迭代數據前出現)。

白話解釋下

  • 關鍵字參數(**),代表參數是“鍵=值”的列表,其實就是字典。
    • 如果出現在函數定義中,那么說明這個函數接受"鍵=值"列表的參數,數量可以是任意多
    • 如果出現在函數調用中,**后面跟著的是字典類型
  • 位置參數(*),代表參數是"值"的列表,或者干脆就是元組的方式
    • 如果出現在函數定義中,那么說明這個函數接受“值”列表的參數,數量可以是任意多
    • 如果出現在函數調用中,那么說明*后面跟著是元組類型

舉個例子

先看看函數定義中的關鍵字參數

# 這個函數接受任意多的參數,參數樣式為“鍵=值”
def func(**arguments):
    print(arguments)
 
# ---------- 調用 1 ----------

# 兩個參數
func(name='steven', age=25)

# 運行結果
{'age': 25, 'name': 'steven'}


# ---------- 調用 2 ----------

# 三個參數
func(name='steven', age=25, gender='male')

# 運行結果
{'age': 25, 'name': 'steven', 'gender': 'male'}

再看看函數調用中的關鍵字參數

# 函數定義了兩個帶關鍵字的參數
def func(name, age):
    print("name: {}, age: {}".format(name, age))
    
# ---------- 調用 1 ----------

# 最通常的調用方式
func(name='steven', age=25)

# 運行結果
name: steven, age: 25

# ---------- 調用 2 ----------

# 用**的方式
arguments = {'name':'steven', 'age':25}
func(**arguments)

# 運行結果
name: steven, age: 25

看看函數定義中的位置參數

# 這個函數接受任意多的參數,參數樣式為"值"
def func(*arguments):
    print(arguments)
    
# ---------- 調用 1 ----------

# 兩個參數
func('steven', 25)

# 運行結果
('steven', 25)


# ---------- 調用 2 ----------

# 三個參數
func('steven', 25, 'male')

# 運行結果
('steven', 25, 'male')

看看函數調用中的位置函數

# 函數定義了兩個帶關鍵字的參數
def func(name, age):
    print("name: {}, age: {}".format(name, age))
    
# ---------- 調用 1 ----------

# 最通常的調用方式
func('steven', 25)

# 運行結果
name: steven, age: 25

# ---------- 調用 2 ----------

# 用*的方式
arguments = ('steven', 25)
func(*arguments)

# 運行結果
name: steven, age: 25
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容