我希望能够做到,例如:
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
的结果存储为list
,iterable
或其他结构(这是我在目前的申请中所做的),但我不知道#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
答案 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)