Python映射函数是一个返回值的函数吗?

Python映射函数是一个返回值的函数吗?,python,list,return-type,Python,List,Return Type,我一直在尝试使用Python中的map函数,但遇到了一些问题。我不知道以下哪种方法是将函数foo映射到列表栏的正确方法: map(foo, bar) 或 我从不同的网站得到不同的结果。以下哪种用法正确?map返回一个新列表,并且不会更改您在函数中输入的列表。因此,用法是: def foo(x): #sample function return x * 2 bar = [1, 2, 3, 4, 5] newBar = map(foo, bar) 在口译员中: >>>

我一直在尝试使用Python中的
map
函数,但遇到了一些问题。我不知道以下哪种方法是将函数foo映射到列表栏的正确方法:

map(foo, bar)


我从不同的网站得到不同的结果。以下哪种用法正确?

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]
注意:这是Python2.x,在Python2中返回
foo(…)
的返回值列表。如果您不关心结果,只想通过
foo
运行
bar
的元素,那么您的两个示例都可以运行

在Python3中,返回一个惰性计算的迭代器。您的两个示例都不会实际运行
bar
foo
的任何元素。您将需要迭代该迭代器。最简单的方法是将其转换为列表:

list(map(foo, bar))
在Python 2中,map()返回一个新列表。在Python3中,它返回一个迭代器。您可以使用以下命令将其转换为列表:

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
这在Python3中非常常见
zip
enumerate
还返回迭代器。这通常被称为惰性评估,因为只有在真正需要时才会生成值

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