在Python3中,映射不能按预期工作

2024-05-23 16:30:52 发布

您现在位置:Python中文网/ 问答频道 /正文

这里是新手。在

这段代码在Python2.7中工作,但在3.3中没有

def extractFromZipFiles(zipFiles, files, toPath):
    extractFunction = lambda fileName:zipFiles.extract(fileName, toPath) 
    map (extractFunction,files)
    return

没有错误,但是文件没有被提取。不过,当我用for循环替换时,效果很好。在

^{pr2}$

代码不会出错。在


Tags: 文件lambda代码mapreturndef错误extract
2条回答

通常不鼓励使用map来调用函数,但也就是说,它不起作用的原因是python3返回了一个生成器,而不是一个列表,因此直到您对它进行了迭代之后才会调用该函数。为确保调用函数:

list(map(extractFunction,files))

但它正在创建一个未使用的列表。更好的方法是更加明确:

^{pr2}$

就像头部的情况一样,两条线确实比一条好。在

python3中的map是一个迭代器,而在python2中,它计算一个列表。所以,你要找的是a way to consume the entire iterator。谢天谢地,这里有an ^{} recipe

import collections
def extractFromZipFiles(zipFiles, files, toPath):
    extractFunction = lambda fileName:zipFiles.extract(fileName, toPath) 
    collections.deque(map(extractFunction,files), maxlen=0)
    return

相关问题 更多 >