python输出星号_Python的星号(*、**)的作用

本文介绍了Python中星号(*)和双星号(**)在函数参数、解包操作中的作用。*args用于接收可变数量的位置参数,形成元组;**kwarg用于接收可变数量的关键字参数,形成字典。示例代码展示了如何使用星号进行参数传递和解包。同时,文章指出*args始终为元组,不可修改,而**d仅传递字典键作为位置参数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 函数的可变参数

当函数的参数前面有一个星号*的时候表示这是一个可变的位置参数,两个星号**表示是可变的关键字参数。

#!env python

#coding=utf-8

#

def foo(*args, **kwarg):

for item in args:

print item

for k,v in kwarg.items():

print k,v

print 30*'='

if __name__ == '__main__':

foo(1, 2, 3, a=4, b=5)

foo(2, 3, a=4, b=5, c=1)

输出如下:

lxg@web-Dev ~/station $ python test_param.py

1

2

3

a 4

b 5

==============================

2

3

a 4

c 1

b 5

==============================

这样我们可以传入任意个数的参数。

2. unpack参数

星号*把序列/集合解包(unpack)成位置参数,两个星号**把字典解包成关键字参数。下面通过示例来进一步加深理解:

#!env python

#coding=utf-8

def foo(*args, **kwarg):

for item in args:

print item

for k,v in kwarg.items():

print k,v

print 30*'='

if __name__ == '__main__':

#foo(1, 2, 3, a=4, b=5)

#foo(2, 3, a=4, b=5, c=1)

v = (1, 2, 4)

v2 = [11, 15, 23]

d = {'a':1, 'b':12}

foo(v, d)

foo(*v, **d)

foo(v2, d)

foo(*v2, **d)

输出如下:

lxg@web-Dev ~/station $ python test_param.py

(1, 2, 4)

{'a': 1, 'b': 12}

==============================

1

2

4

a 1

b 12

==============================

[11, 15, 23]

{'a': 1, 'b': 12}

==============================

11

15

23

a 1

b 12

==============================

上面的示例中如果v、v2、d没有加星号那么就当成了一个参数传递给了函数,如果加了星号那么就会解包后传递给函数。foo(*d, **d)等价于foo(1, 2, 4, a=1, b=12)。

3. 几个注意点

可变位置参数*args是一个元组,是不可修改的。

>>> def foo(*args):

... args[0] = 5

...

>>> foo(1, 2, 3)

Traceback (most recent call last):

File "", line 1, in

File "", line 2, in foo

TypeError: 'tuple' object does not support item assignment

>>> l = [1, 2, 3]

>>> foo(*l)

Traceback (most recent call last):

File "", line 1, in

File "", line 2, in foo

TypeError: 'tuple' object does not support item assignment

无论我们怎么传入参数,args都是一个tuple类型,不能进行修改。

对于字典类型的如果只使用一个型号*那么传入的只是字典的键。

>>> def foo2(*args, **kwarg):

... print args, kwarg

...

>>> d = {'a':1, 'b':2, 'c':3}

>>> foo2(*d)

('a', 'c', 'b') {}

>>> foo2(**d)

() {'a': 1, 'c': 3, 'b': 2}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值