原文:https://www.cnblogs.com/xuyuanyuan123/p/6674645.html
作者:白木潇潇夕
多个实参,放到一个元组里面,以*开头,可以传多个参数;**是形参中按照关键字传值把多余的传值以字典的方式呈现
*args:(表示的就是将实参中按照位置传值,多出来的值都给args,且以元祖的方式呈现)
示例:
def foo(x,*args):
print(x)
print(args)
foo(1,2,3,4,5)#其中的2,3,4,5都给了args
执行结果是:
1
(2, 3, 4, 5)
当args与位置参数和默认参数混用的情况下:(注意三者的顺序)
示例一、(三者顺序是:位置参数、默认参数、*args)
1 2 3 4 5 6 |
|
执行结果是:
1 2 3 |
|
示例二、(三者顺序是:位置参数、*args、默认参数)
1 2 3 4 5 6 |
|
执行结果是:
1 2 3 |
|
其中关于*,可以从2个角度来看(需要拆分来看):
1、从形参的角度来看:
示例:
1 2 3 |
|
执行结果是:
1 |
|
2、从实参的角度来看:
示例:
1 2 3 4 5 6 |
|
执行结果是:
1 2 3 |
|
——————————————————————————————————————————————————————————————————————————————————————
**kwargs:(表示的就是形参中按照关键字传值把多余的传值以字典的方式呈现)
示例:
1 2 3 4 |
|
执行结果是:
1 2 |
|
关于**kwargs与位置参数、*args、默认参数混着用的问题:(注意顺序)
位置参数、*args、**kwargs三者的顺序必须是位置参数、*args、**kwargs,不然就会报错:
示例:
1 2 3 4 5 |
|
执行结果是:
1 2 3 |
|
错误示例:(由于顺序错误)
1 2 3 4 5 |
|
执行结果就会报错:
1 |
|
位置参数、默认参数、**kwargs三者的顺序必须是位置参数、默认参数、**kwargs,不然就会报错:
示例:
1 2 3 4 5 |
|
执行结果是:
1 2 3 |
|
其中关于**,可以从2个角度来看(需要拆分来看):
1、从形参的角度来看:
示例:
1 2 3 |
|
执行结果是:
1 |
|
2、从实参的角度来看:
示例一:
1 2 3 4 5 6 |
|
执行结果是:
1 2 3 4 |
|
示例二:
1 2 3 4 5 6 |
|
执行结果是:
1 2 3 4 |
|