如何在Python 3中创建可重用或持久的映射?

时间:2017-12-07 15:23:06

标签: python dictionary copy reset persistent-storage

我希望能够做到,例如:

pmap = persistent_map(function, iterable(args))
foo = map(bar, pmap)
baz = map(bar, pmap) # right-hand side intentionally identical to that of the previous line.

在使用pmap构建baz之前,解释员会知道重置pmap

我知道我可以将tuple的结果存储为listiterable或其他结构(这是我在目前的申请中所做的),但我不知道#39; t想要这样做是因为1)巨大的存储要求(也考虑副本)和2)不同的结果,例如从动态文件生成persistent_map时。

如果存在等效的persistent_map,相应的内置功能或标准库功能是什么?或者,是否有第三方(希望可靠且随时可用)persistent_map等效?如果现有选项只是第三方,那么如何仅使用内置且可能的标准库功能创建def persistent_map(function, iterable): from functools import partial return partial(map, function, iterable) foo = map(bar, pmap()) baz = map(bar, pmap()) # A toy example: pmap = persistent_map(hex, range(3)) foo = map(len , pmap()) baz = map(hash, pmap()) print(*zip(pmap(), foo, baz)) ('0x0', 3, 982571147) ('0x1', 3, 982571146) ('0x2', 3, 982571145)

回应@MartijnPieters的评论,"那是什么生成器用于",你是说一个解决方案就像是

IQueryable

1 个答案:

答案 0 :(得分:1)

为时已晚,但我认为这将是OP所想象的:

class PersistentMap:
    def __init__(self, func, iterable):
        self.func = func
        self.iterable = iterable

    def __iter__(self):
        return map(self.func, self.iterable)

foo = PersistentMap(hex, range(3))
bar = map(len, foo)
baz = map(hash, foo)
print(*zip(foo, bar, baz))
# ('0x0', 3, -1640763679766387179) ('0x1', 3, -4170177621824264673) ('0x2', 3, 4695884286851555319)