Python中的*map是什么意思?

1 投票
1 回答
2774 浏览
提问于 2025-04-18 18:19

我知道 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)

根据 Python 3 的官方文档 §6.3.4

如果在函数调用中出现了 *expression 这样的语法,expression 必须是一个可迭代对象。这个可迭代对象中的元素会被当作额外的位置参数来处理……

撰写回答