*args、**kwargs用法:
使用 *args、**kwargs可以传递多个参数
*args、**kwargs在Python中的代码中经常会见到这两个词。 args 和 kwargs,前面通常还会加上一个或者两个星号。其实这只是编程人员约定的变量名字,args 是 arguments 的缩写,表示位置参数;kwargs 是 keyword arguments 的缩写,表示关键字参数。这其实就是 Python 中可变参数的两种形式,并且 *args 必须放在 **kwargs 的前面,因为位置参数在关键字参数的前面。
def test_args(first, *args):
print("第一个必填参数的值:", first)
print(type(args))
for arg in args:
print("其余可选参数的值:", arg)
def test_kwargs(first, *args, **kwargs):
print("第一个必填参数的值:", first)
print(type(kwargs))
for arg in args:
print("其余可选参数的值: ", arg)
for k, v in kwargs.items():
print("可选且指定了名称的参数:%s=%s" % (k, v))
if __name__ == '__main__':
test_args(0)
print()
test_args(1, 2, 3, 4)
print()
test_kwargs(0)
print()
# 错误使用,第一个参数已指定名称,无法自定义
# test_kwargs(k0=1)
test_kwargs(0, k1=1)
print()
test_kwargs(1, 2, 3, 4, k1=5, k2=6)
print()
# **将字典展开为参数
params = {'a': 11, 'b': 12, 'c': 13}
test_kwargs(0, **params)
"""
args: 以元祖的形式存放多个参数
kwargs:以字典的形式传递多个参数
"""
def fun1(*args):
print("args = ", args) # 存放了所有的参数
def fun2(x, *args):
print("x = ", x)
print("args = ", args) # 存放了除x外所有的参数
def fun3(x, y=1, *args):
print("x = ", x)
print("y = ", y)
print("args = ", args) # 存放了除x和y外所有的参数
def fun4(x, *args, y=1):
print("x = ", x)
print("y = ", y) # 保持默认值
print("args = ", args) # 存放了除参数x外的所有的参数
def fun5(**kwargs):
print("kwargs = ", kwargs) # 以字典格式存放了所有的参数
def fun6(x, **kwargs):
print("x = ", x)
print("kwargs = ", kwargs) # 以字典格式存放了除x外所有的参数
def fun7(x=1, **kwargs):
print("x = ", x)
print("kwargs = ", kwargs) # 以字典格式存放了所有的参数
def fun8(x, *args, **kwargs):
"""注意调用顺序
"""
print("x = ", x)
print("args = ", args)
print("kwargs = ", kwargs) # 以字典格式存放了所有的参数
if __name__ == "__main__":
print("fun1 result:")
fun1(1, 2, 3, 4, 5)
print("fun2 result:")
fun2(1, 2, 3, 4, 5)
print("fun3 result:")
fun3(1, 2, 3, 4, 5)
print("fun4 result:")
fun4(1, 2, 3, 4, 5)
print("fun5 result:")
fun5(x1=1, x2=2, x3=3, x4=4, x5=5) # 调用时需要指定变量名
print("fun6 result:")
fun6(x=1, x2=2, x3=3, x4=4, x5=5) # 需要给定x的值
print("fun7 result:")
fun7(x1=1, x2=2, x3=3, x4=4, x5=5) # 可以不指定x的值(缺省值)
print("fun8 result:")
fun8(1, 2, 3, x1=1, x2=2, x3=3) # x=1, args=(2,3), kwargs={"x1": 1, "x2": 2, "x3": 3}