Python自定义turboaccumulate生成器的标准库替代方案及标准命名咨询
Answer
先直接给你几个关键点:
Python标准库没有直接对应实现
itertools.accumulate的核心是迭代外部输入序列并累积结果,而你的生成器是自反馈式的函数迭代——用前一次的输出作为下一次的输入,反复应用同一个函数。这种逻辑在标准库中没有现成的工具函数,你搜不到是正常的。这个操作的标准名称
它在数学和编程领域通常被称为迭代映射(iterated map),有时候也叫函数迭代器(function iterator)。"turboaccumulate"确实不是公认术语,换成更直观的名字(比如iterated_map或者repeat_apply)会让你的代码更容易被其他Python开发者理解。关于实现的优化建议
你当前的turboaccumulate实现已经非常简洁、高效了,完全符合Python的风格。如果想要更贴近标准库的写法,也可以用Python 3.8+支持的海象运算符结合itertools.repeat简化,但可读性未必比你的while循环更好:from itertools import repeat def iterated_map(f, initial): x = initial yield from (x := f(x) for _ in repeat(None))要是需要兼容Python 3.7及更早版本,你的原始写法就是最优解。
针对你的Blum Blum Shub实现
把函数名换成iterated_map后,代码会更符合社区的可读性预期,比如:def blum_blum_shub(p, q, s): #assert gcd(p*q, s) == 1 #assert p % 4 == 3 and q % 4 == 3 #assert s not in {0, 1} M = p * q yield from iterated_map(lambda x: pow(x, 2, M), initial=s)
总的来说,你的实现本身没有问题,只是需要换个更通用的函数名来提升代码规范性~
内容的提问来源于stack exchange,提问作者JamesTheAwesomeDude
相关产品推荐
相关产品推荐

