关于python的*和**

在python中的*和**除了分别表示乘法运算和幂运算外还有其它作用。在python中可能会经常看到类似于def function1(*args, **kwargs)的函数定义形式,或者看到function1(*v1, **v2)的函数调用形式,很多没看到过的人可能会不知所以。下面分别说明:

符号*

在函数定义中

在函数定义时,*表示可变位置参数, *修饰的参数表示可以传递任意个数的参数,传递的参数在函数内部表现为一个元组(tuple)。例如:

>>> def test_args(*args):
...     print(type(args))
...     print(args)
...     for arg in args:
...         print(arg)
...
>>> test_args(1, 2, 'hello')
<type 'tuple'>
(1, 2, 'hello')
1
2
hello

示例中传递了三个参数,可以看到args的类型为tuple,可以采取任意的适用与tuple的方法处理args。

在函数调用中

在函数调用中,*会将使用它修饰传递的参数进行迭代展开,例如:

>>> def func(a, b, c):
...     return a+b+c
...
>>> func(*[1, 2, 3])
6
>>> func(*(i*i for i in range(3)))
5
>>> def func(*args):
...     print(args)
...
>>> func(*range(10))
(0, 1, 2, 3, 4, 5, 6, 7, 8, 9)

符号**

在函数定义中

在函数定义时,**表示可变关键字参数,表示可以传递任意个数的关键字参数(形如a = 1, b = 2),在函数内部表现为一个字典(dict),例如:

>>> def test_kwargs(**kwargs):
...     print(type(kwargs))
...     print(kwargs)
...     for k,v in kwargs.items():
...         print('%s:%s'%(k, v))
...
>>> test_kwargs(a = 1, b = 2)
<type 'dict'>
{'a': 1, 'b': 2}
a:1
b:2

在函数调用中

在函数调用中,**修饰的传递的参数会被当作字典以key=value的形式展开,例如:

>>> def func(a, b, c):
...     print("a:%s; b:%s; c:%s"%(a, b, c))
>>> func(**{'c':1, 'b':2, 'a': 3})
a:3; b:2; c:1
...
>>> def func(**kwargs):
...     print(kwargs)
>>> func(**{'c':1, 'b':2, 'a': 3})
{'a': 3, 'c': 1, 'b': 2}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值