建
议
形参顺序:位置
参数
,默
认参数
,
*args,**kwargs
位置参数:
形
参
:放在所有
参数
之前
实参
:放在所有
参数
之前
[Python]
纯文本查看
复制代码
def one(name,age,gender='男',*args,**kwargs):[/align] print(name,age,gender,args,kwargs) one('elijah',18) >>>: elijah 18 男 () {} |
注意:实参,形参只需放在最前并按照顺序传递即可
默认参数:
形
参
(注意):放在位置
参数
之后,
**kwargs
之前
实参:根据形参的位置调整
情况一:(形参
)在
位置
参数之后,*args和**kwargs之前实参
传递
方法之一:
实参传递
(建
议
,情
况
一可用)
[Python]
纯文本查看
复制代码
1 2 3 4 | def two(name,age,gender='女',*args,**kwargs):[/align] print(name,age,gender,args,kwargs) two('elijah',18,'男') >>>:elijah 18 男 () {} |
实参传递
方法之二:
关键
字
传递
(不建
议
,
视
情
况
而定,第二
种
情
况
可用)
[Python]
纯文本查看
复制代码
1 2 3 4 5 | def three(name,age,gender='女',*args,**kwargs): print(name,age,gender,args,kwargs) three('elijah',18,gender='男') >>>:elijah 18 男 () {} |
情
况
二:(形
参
)在
位置
参数
之后,
**kwargs
之前
实参传递
方法:
关键
字
传递
(必
须
如此)
[Python]
纯文本查看
复制代码
1 2 3 4 | def four(name,age,*args,gender='女',**kwargs):[/align] print(name,age,gender,args,kwargs) four('elijah',18,gender='男') >>>:elijah 18 男 () {} |
注意:不可使用
情
况
一的方法一,那
样会
被
*args
收集到
[Python]
纯文本查看
复制代码
1 2 3 4 | def five(name,age,*args,gender='女',**kwargs):[/align] print(name,age,gender,args,kwargs) five('elijah',18,'男') >>>:elijah 18 女 ('男',) {} |
解析:
1. elijah 18
两个实参
,
会
按照
顺
序
传递给
name,age,
2. '
男
'
这个实参传递时
,遇到的形
参
是
*args ,
这时
就
会
被
*args
收集,
变
成元祖的
第一
个
元素
3.
这时
实参
已
经传递
完
毕
,形
参还
有一
个
默
认参数
gender='
女
'
这
造成了正常
传递
的不正
确
的
结
果
关键字参数:
错误
:
[Python]
纯文本查看
复制代码
1 2 3 | def sex(name, age, gender='女', *args, **kwargs): print(name, age, gender, args, kwargs) sex('elijah', 18, gender='男',45,name1='test') |
正
确
:
[Python]
纯文本查看
复制代码
1 2 3 | def seven(name, age, gender='女'): print(name, age, gender) seven(age=18,gender= '男',name='elijah') |
注意:
传递给
*args
的
实参
位置之前不可使用
关键
字
参数
1.
这
就相
当
于
**kwargs
不可放在
*args
之前
2.但是放在 *args之后,并且存在 **kwargs 时,就会被 **kwargs 收集;**kwargs不存在,就会报错
3.
所以
关键
字
参数给
位置
参数
或者默
认参数传值
是最好不要
给
不定
长传参
相配合
不定长传参:
位置:
*args
在前,
**kwargs
在后
它们分别接收多值并转换成元祖和字典,在这就不讲关于它们的操作,用
元祖和字典的方法操作
即可;在这只提及几个知识点。我
们
知道
*args
和
**kwargs
会
把收集的
参数
合成元祖和字典,知道了
这个
之后那,
我
们
就可以直接
给
不定
长参数传递
元祖和字典,就不需要收集合成的步
骤
了。
*args: 元祖传入
[Python]
纯文本查看
复制代码
1 2 3 4 5 6 | card = ('handsome boy','brilliant') def eight(a,b): print(a,b) eight(*card) >>>:1 2 |
*args: 多参数类型配合
[Python]
纯文本查看
复制代码
1 2 3 4 | def eight(name, age, gender='女', *args, **kwargs):[/align] print(name, age, gender, args, kwargs) eight('elijah', 18, '男',*('handsome boy','brilliant')) >>>:elijah 18 男 ('brilliant', 'handsome boy') {} |
注意:需要
给传递
的元祖前加
*
号
,不然
会
把
传递
的元祖,再次收集合
并
成元祖的第一
个
元素
补
充:
list,set,tuple
是可相互
转换
的,所以也可以
当
做
*args
的
参数传递
**kwargs: 字典传入
[Python]
纯文本查看
复制代码
1 2 3 4 5 6 | dic = {'hobby1':'guitar','hobby2':'sketch'} def ten(hobby1,hobby2): print(hobby1,hobby2) ten(**dic) >>>:guitar sketch |
**kwargs:
[Python]
纯文本查看
复制代码
1 2 | def nine(name, age, gender='女', *args, **kwargs):[/align] print(name, age, gender, args, kwargs) nine('elijah', 18, '男',*{'handsome boy','brilliant'},**{'hobby':['guitar','sketch']}) |
注意:
传递
的字典需要加
两个
*
号
更多技术资讯可关注:itheimaGZ获取