Python map函数是一个值返回函数吗?

时间:2017-12-27 21:37:40

标签: python list return-type

我一直在尝试使用Python中的map函数,而且我遇到了一些麻烦。我无法分辨哪些是将函数foo映射到列表栏的正确方法:

map(foo, bar)

newBar = map(foo, bar)

我从不同的网站获得了不同的结果。哪些是正确的用法?

3 个答案:

答案 0 :(得分:5)

在Python 2中,map()返回foo(...)的返回值列表。如果您不关心结果,只想运行barfoo的元素,那么您的任何一个示例都可以使用。

在Python 3中,map()返回一个懒惰计算的迭代器。您的任何一个示例都不会实际运行barfoo 的所有元素。您将需要迭代该迭代器。最简单的方法是将其转换为列表:

list(map(foo, bar))

答案 1 :(得分:1)

map返回一个新列表,并不会更改您输入函数的列表。因此,用法是:

def foo(x): #sample function
    return x * 2

bar = [1, 2, 3, 4, 5]
newBar = map(foo, bar)

在翻译中:

>>> print bar
[1, 2, 3, 4, 5]
>>> print newBar
[2, 4, 6, 8, 10]

注意:这是python 2.x

答案 2 :(得分:1)

在Python 2 map()中返回一个新列表。在Python 3中,它返回一个迭代器。您可以将其转换为包含以下内容的列表:

new_list = list(map(foo, bar))

顾名思义,迭代器的一个常见用法是迭代它:

for x in map(foo, bar):
    # do something with x

这会一次生成一个值,而不会将所有值都放在内存中,因为创建列表会。

此外,您可以通过迭代器执行单个步骤:

my_iter = map(foo, bar)
first_value = next(my_iter)
second_value = next(my_iter)

现在与其他人合作:

for x in map(foo, bar):
    # x starts from the third value

这在Python 3中很常见。zipenumerate也返回迭代器。这通常被称为惰性评估,因为值只在真正需要时生成。