网站必须做可信认证,商城多用户源码,门户网站建设周期,seo网上课程1. 函数的可变参数
当函数的参数前面有一个星号*的时候表示这是一个可变的位置参数#xff0c;两个星号**表示是可变的关键字参数。
#!env python
#codingutf-8
#
def foo(*args, **kwarg):
for item in args:
print item
for k,v in kwarg.items():
print k,v
print 30*
if _…1. 函数的可变参数
当函数的参数前面有一个星号*的时候表示这是一个可变的位置参数两个星号**表示是可变的关键字参数。
#!env python
#codingutf-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, a4, b5)
foo(2, 3, a4, b5, c1)
输出如下
lxgweb-Dev ~/station $ python test_param.py
1
2
3
a 4
b 52
3
a 4
c 1
b 5这样我们可以传入任意个数的参数。
2. unpack参数
星号*把序列/集合解包unpack成位置参数两个星号**把字典解包成关键字参数。下面通过示例来进一步加深理解
#!env python
#codingutf-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, a4, b5)
#foo(2, 3, a4, b5, c1)
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)
输出如下
lxgweb-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, a1, b12)。
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 assignmentl [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}