繁体   English   中英

地图在 python 3 中无法按预期工作

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM