【python】python参数中的星号*, **

分两类。
一是作为函数定义时,一类是函数调用时。

一个 *   对应一个元组;
两个 **  对应一个字典;

-------------------

当函数定义时:

一个 *   表示此函数接受的参数为一个元组;
两个 **  表示此函数接受的参数是一个字典;

举例:

def nostar(a):     print a def onestar(*a):     print a def twostar(**a):     print a nostar(1) onestar(1,2,3) twostar(a=1,b=2,c=3)

上面的调用是正确的调用。

下面是不正确的调用:

nostar(1,2,3) nostar(a=1,b=2,c=3) onestar(a=1,b=2,c=3) twostar(1, 2, 3)

nostar 定义只接受一个参数,则它只能明确接受一个参数,不允许可变参数,不管是传1,2,3的元组给它,还是传a=1,b=2这样的字典给它,都是错误的用法。编译器会访回一个错误。
同样地,onestar定义接受一个元组,表示允许接受可变参数。但它只能接受像1,2,3这样的元组,而无法理解a=1,b=2类似这样的字典。
twostar定义为接受一个字典,表示允许key=value这样的可变参数。如果只传1,2,3这样的元组给它,同样报错。

----------------------------

当函数调用时:
* 号起了自动拆封参数的作用。

一个 *   表示对一个元组参数进行拆封;
两个 **  表示对一个字典参数进行拆封;

举例:

def test(a, b, c): print a, b, c test(1,2,3) x=(1,2,3) test(*x) y={'a':1, 'b':2, 'c':3} test(**y)

通过上面的例子你就明白了。
x是一个列表,直接传给test 函数是会报错的。因为test 定义为接受三个参数。而你传给它的竟是一个列表,显然不行。因此,你通过在前面加* 号,python会自动帮你进行参数拆分。 两个** 号也是类似一样的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值