彻底搞懂python中*和**的用法

*和**的用法看到太多了,总结下其中的一些细节

【1】*的用法

*是可以接受任意数量的参数,比如如下代码:

x=['x','y','z','q']
def m(*args):
    print(args)
m(x[0],x[1],x[2],x[3])
#args:('x', 'y', 'z', 'q')
【2】**的用法

而**可以接受任意数量的指定键值的参数,比如如下代码:

def m(**kwargs):
    print(kwargs)
m(a=1,b=2)
#kwargs:{'b': 2, 'a': 1}

可见区别就是**会将指定的参数变成一个dict,如果要传递的参数想传入任意数量的参数以及指定键值的参数,可用如下代码:

def m(*args,**kwargs):
	print(args)
    print(kwargs)
m(1,2,a=1,b=2)
#args:(1,2),kwargs:{'b': 2, 'a': 1}

需要注意的是,比如上述代码中,我们不可以在指定键值的参数后面再加任意参数m(1,2,a=1,b=2,3,4),这种写法是错误,程序会报错SyntaxError: positional argument follows keyword argument,这个需要记住。

【3】对参数使用*

有时候会看到在使用某个参数的时候会在它前面加上*号,其实这个就是对tupple进行解析。比如如下代码:

x=['x','y','z','q']
def man(aaa,bbb,*args):
   print(aaa)
   print(bbb)
   print(args)
m = man(*x)
#输出
x
y
('z', 'q')

可见列表被解析了,而且因为args之前有两个值,所以args中只保留了后两个值,这是一个需要注意的细节,同理**也有这种细节

【4】对参数使用**

比如有如下代码:

x={'aaa':222,'bbb':111,'name':'kairen'}
def m(aaa,bbb,**kwargs):
    print(aaa)
    print(bbb)
    print(kwargs)
m = m(**x)
#输出
222
111
{'name': 'kairen'}

可见这个和之前的一样,参数也被解析了,值得注意的,因为这个是按照键值对应的,所以函数中的参数必须要和x中的键值一致,否则报错。
看一个可能会让人看迷糊的代码:

l=[1,2,3]
x={'aaa':222,'bbb':111,'name':'kairen'}
def m(*args,aaa,bbb,**kwargs):
    print(args)
    print(aaa)
    print(bbb)
    print(kwargs)
m = m(*l,**x)
#输出
(1, 2, 3)
222
111
{'name': 'kairen'}

可是如果改为m(aaa,bbb,*args,**kwargs)就报错了,不过这种写法真是作死了,一般就写成如下代码:

l=[1,2,3]
x={'aaa':222,'bbb':111,'name':'kairen'}
def m(*args,**kwargs):
    print(args)
    print(kwargs)
m = m(*l,**x)
输出为
(1, 2, 3)
{'name': 'kairen', 'aaa': 222, 'bbb': 111}

对参数进行解析的话我们就可以传入多个list参数,比如下代码:

l=[1,2,3]
ll =[1,2,3]
x={'aaa':222,'bbb':111,'name':'kairen'}
def m(*args,**kwargs):
    print(args)
    print(kwargs)
m = m(*l,*ll,**x)
 输出
 (1, 2, 3, 1, 2, 3)
{'aaa': 222, 'name': 'kairen', 'bbb': 111}

个人的一些总结,有不足之处请留言,谢谢!

  • 7
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值