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