Python如何提取itertools.count创建的迭代器的当前数值
解决方法
这个需求完全可以实现,提供两种常用方案:
方案1:直接从count对象提取当前值(依赖CPython实现)
itertools.count没有公开的取值API,但可以通过其内置的序列化方法__reduce__()拿到repr中显示的当前值,代码示例如下:
import itertools figndx = itertools.count() next(figndx) # 返回0 next(figndx) # 返回1 # 此时repr(figndx)输出为count(2) current_val = figndx.__reduce__()[1][0] print(current_val) # 输出2,就是repr中显示的数值
注意:该方法依赖CPython的内部实现,如果你需要代码兼容不同Python解释器,建议选择方案2。
方案2:自定义计数器类(通用稳妥方案)
自己封装简单的计数器类,既可以保持和itertools.count一致的调用方式,还能随时读取当前值,完全可控:
class Counter: def __init__(self, start=0, step=1): self.next_val = start self.step = step self.last_return = None # 可选:存储最后一次返回的数值 def __next__(self): self.last_return = self.next_val self.next_val += self.step return self.last_return def __iter__(self): return self # 用法和itertools.count完全一致 figndx = Counter() an.plotimg(ref_frame, next(figndx), 'Ref Frame') an.plotimg(new_frame, next(figndx), 'New Frame') # 直接读取属性即可拿到对应数值 print(figndx.next_val) # 输出下一次调用next()会返回的值 print(figndx.last_return) # 输出上一次调用next()返回的数值
内容的提问来源于stack exchange,提问作者jrive
相关产品推荐
相关产品推荐

