* map在python中意味着什么?

时间:2014-08-24 04:30:19

标签: python

我知道函数map。它使用类似

的东西

new_list = map(func, list)

*map(func, list)是什么意思?它像

一样使用
hands = set(best_hand(h) for h in itertools.product( *map(replacements, hand)))

1 个答案:

答案 0 :(得分:4)

这意味着从map()返回的可迭代将解压缩作为函数的参数。也就是说,不是调用函数并将可迭代对象作为单个参数传递,而是将iterable的各个元素作为单独的参数传递。

这种技术的例证:

>>> 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)

来自Python 3 reference §6.3.4

  

如果语法*expression出现在函数调用中,expression必须求值为iterable。来自此迭代的元素被视为它们是额外的位置参数......