[英]map doesn't work as expected in python 3
新手来了
此代码在 python 2.7 中有效,但在 3.3 中无效
def extractFromZipFiles(zipFiles, files, toPath):
extractFunction = lambda fileName:zipFiles.extract(fileName, toPath)
map (extractFunction,files)
return
没有错误,但未提取文件。 但是,当我用 for 循环替换时工作正常。
def extractFromZipFiles(zipFiles, files, toPath):
for fn in files:
zipFiles.extract(fn, toPath)
# extractFunction = lambda fileName:zipFiles.extract(fileName, toPath)
# map (extractFunction,files)
return
代码不会出错。
通常不鼓励使用 map 来调用函数,但话虽如此,它不起作用的原因是因为 Python 3 返回一个生成器,而不是一个列表,因此在您对其进行迭代之前不会调用该函数。 为了确保它调用函数:
list(map(extractFunction,files))
但它正在创建一个未使用的列表。 更好的方法是更明确:
for file in files:
extractFunction(file)
与头部的情况一样,两条线确实比一条好。
python3 中的map
是一个迭代器,而在 python2 中,它计算一个列表。 所以,您正在寻找的是一种使用整个 iterator 的方法。 值得庆幸的是,有一个itertools
食谱:
import collections
def extractFromZipFiles(zipFiles, files, toPath):
extractFunction = lambda fileName:zipFiles.extract(fileName, toPath)
collections.deque(map(extractFunction,files), maxlen=0)
return
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.