*args与**args的区别

python学习

args 与 kwargs的理解
1 *args和
kwargs 是python中经常使用的函数参数,代表着函数的参数数目是可变的。并且args使用时必须要在kwargs的前面,当
在函数外的时候是解包操作符,当*和在函数定义时出现时组包,*和属于PEP448规范,而PEP448,在python3中对PEP448进行了拓展新增了列表陈列式,字典陈列式, 集合陈列式,元祖陈列式而且字典陈列式可以帮助我们来实现两个字典的合并并且去掉重复的键值对
2 在定义函数中,*args与
kwargs接受参数不同,*args接受 元组类型,将不定长的参数打包成元组,kwargs是接受字典类型
3 *与
在函数外的区别
*在函数外属于解包操作符

a=[1,2,3]
print(*a)

1 2 3
可以实现解包
**有不同之处

a={1:2,2:3,3:4}
print(**a)

print(**a)
TypeError: keywords must be strings

为何出现这种原因,首先是能解包出来的

c={'name':'zhang','age':2}
print('name:{name},Age:{age}'.format(**c))

name:zhang,Age:2
为何formart可以解包出来
原来 **c解包出来的格式 **c=name=‘zhang’,age=2
而print无法输出的原因

def print(self, *args, sep=' ', end='\n', file=None): # known special case of print
    """
    print(value, ..., sep=' ', end='\n', file=sys.stdout, flush=False)
    

print函数接受的变量是*arg类型
**只能解mapping类型,就是映射数据

4 字典陈列式可以帮助我们来实现两个字典的合并并且去掉重复的键值对

a={1:2,2:3,3:4}
b={1:2,5:6,9:0}
c={**a,**b}
print(c)

{1: 2, 2: 3, 3: 4, 5: 6, 9: 0}

可以发现解包组合后的字典实现了去重
5 函数内参数问题
在函数参数中 关键字参数必须在*args后

def fun(a,*b):
    print(a)
    print(b)
fun(a=1,2,3,4)

SyntaxError: positional argument follows keyword argument

显示语法错误
正确的方式

def fun(a,*args,b,**kwargs):
    print(a)
    print(args)
    print(b)
    print(kwargs)
fun(1,2,3,4,w=4,d=6,b=2,c=3)

1
(2, 3, 4)
2
{‘w’: 4, ‘d’: 6, ‘c’: 3}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值