Python(3.3)映射函数行为

时间:2014-09-14 14:10:24

标签: python python-3.x

import glob,os

os.chdir("C:\\path")

之后如果我执行一行

map(lambda y:os.remove(y),filter(lambda x:os.path.getsize(x)==0,glob.glob('*')))

它不会删除大小为零的文件

但如果我这样做

list(map(lambda y:os.remove(y),filter(lambda x:os.path.getsize(x)==0,glob.glob('*'))))

删除文件。 这实际上是如何工作的?

2 个答案:

答案 0 :(得分:1)

在Python3中,map函数返回map object(而不是Python2中的列表)。
这是为lazy evaluation设计的,这意味着在使用之前未评估该值。 list评估它。

答案 1 :(得分:0)

Python 3.x中的

map返回一个迭代器。传递给map的函数在迭代迭代器之前不会被调用。

list使用迭代器;导致函数被调用。