Python中的*map是什么意思?
我知道 map
这个函数。它的用法大概是这样的:
new_list = map(func, list)
但是 *map(func, list)
这个是什么意思呢?它的用法是这样的:
hands = set(best_hand(h) for h in itertools.product( *map(replacements, hand)))
1 个回答
7
这段话的意思是,从 map()
函数返回的可迭代对象会被“拆开”作为参数传递给函数。也就是说,不是把这个可迭代对象作为一个整体传给函数,而是把它里面的每一个元素都当作单独的参数传进去。
下面是一个示例来说明这个技巧:
>>> def foo(a, b, c): print "a:%s b:%s c:%s" % (a, b, c)
...
>>> x = [1,2,3]
>>> foo(*x)
a:1 b:2 c:3
但是如果你在调用 foo()
时没有拆开 x
,那就意味着你只传了一个参数,而函数其实期待三个参数:
>>> foo(x)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: foo() takes exactly 3 arguments (1 given)
如果在函数调用中出现了
*expression
这样的语法,expression
必须是一个可迭代对象。这个可迭代对象中的元素会被当作额外的位置参数来处理……