先看看官方的解釋吧
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