我知道函数map
。它使用类似
new_list = map(func, list)
但*map(func, list)
是什么意思?它像
hands = set(best_hand(h) for h in itertools.product( *map(replacements, hand)))
答案 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)
如果语法
*expression
出现在函数调用中,expression
必须求值为iterable。来自此迭代的元素被视为它们是额外的位置参数......