Python 中的 "*" 代表什么?
我在Python中看到了一行代码。
self.window.resize(*self.winsize)
这行代码里的“*”是什么意思呢?我在任何Python教程里都没见过这个。
3 个回答
2
这里,self.winsise
是一个元组或者列表,它的元素数量正好和 self.window.resize
这个函数需要的参数数量一样。如果数量少了或者多了,就会出现错误。
不过,我们可以用类似的方法来创建可以接受任意数量参数的函数。具体可以参考 这个链接。
2
其实不一定非得是元组或者列表,任何一种(有限的)可迭代对象都可以。
下面是一个使用生成器表达式的例子:
>>> def f(*args):
... print type(args), repr(args)
...
>>> f(*(x*x for x in range(10)))
<type 'tuple'> (0, 1, 4, 9, 16, 25, 36, 49, 64, 81)
8
一种可能性是 self.winsize 是一个列表或元组。* 操作符可以把列表或元组里的参数拆开。
可以参考这个链接了解更多: http://docs.python.org/tutorial/controlflow.html#unpacking-argument-lists
哦,还有一个关于这个话题的讨论: Python 中解包参数列表/字典的关键字参数
举个例子:
>>> def f(a1, b1, c1): print a1
...
>>> a = [5, 6, 9]
>>> f(*a)
5
>>>
这样可以把列表或元组中的元素拆开。元素可以是任何东西。
>>> a = [['a', 'b'], 5, 9]
>>> f(*a)
['a', 'b']
>>>
还有一个小补充:如果一个函数需要明确数量的参数,那么这个元组或列表的元素数量应该和函数需要的数量一致。
>>> a = ['arg1', 'arg2', 'arg3', 'arg4']
>>> f(*a)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: f() takes exactly 3 arguments (4 given)
>>>
如果想接受多个参数,但又不知道具体有多少个参数,可以这样做:
>>> def f(*args): print args
...
>>> f(*a)
('arg1', 'arg2', 'arg3', 'arg4')
>>>