如何解决使用 None 作为 itertools.accumulate 的初始值
最好将 itertools.accumulate
与 initial=None
一起使用,字面意思是它应该以 None
开头。
例如:
from typing import Optional,Iterable
from itertools import islice,accumulate
def f(a: Optional[A],b: B) -> A:
pass
b_s: Iterable[B] = [...]
_a_s = accumulate(b_s,f,initial=None) # doesn't work!
a_s = list(islice(_a_s,1,None))
这失败了,因为 initial=None
告诉 accumulate
使用第一个元素作为初始元素并从那里开始,所以 f
最终将被调用两个 B
参数。
有人知道一个简单的方法吗?
我目前的计划是使用 False
,但接下来我还有很多事情要解释我对 MyPy 所做的事情。
解决方法
您最好的选择可能是将值 chain
到输入可迭代对象上:
output = accumulate(chain([None],iterable),f)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。