更多课程 选择中心


Python培训

400-111-8989

Python的星号(*、**)的作用?


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 "<stdin>", line 1, in <module>

File "<stdin>", line 2, in foo

TypeError: 'tuple' object does not support item assignment

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

>>> foo(*l)

Traceback (most recent call last):

File "<stdin>", line 1, in <module>

File "<stdin>", 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}

预约申请免费试听课

填写下面表单即可预约申请免费试听! 怕学不会?助教全程陪读,随时解惑!担心就业?一地学习,可全国推荐就业!

上一篇:8个优雅的Python编程技巧
下一篇:如何使用python批量修改文件后缀名

如何自学Python?

说一说python中的几个基础语法

为什么Python类语法应该不同?

0基础入门Python,3 个常识点必须先了解!

  • 扫码领取资料

    回复关键字:视频资料

    免费领取 达内课程视频学习资料

Copyright © 2023 Tedu.cn All Rights Reserved 京ICP备08000853号-56 京公网安备 11010802029508号 达内时代科技集团有限公司 版权所有

选择城市和中心
黑龙江省

吉林省

河北省

湖南省

贵州省

云南省

广西省

海南省