Python动态迭代器类报错:iter()返回NoneType的问题求助
问题根源与解决方案
Hey,你的问题其实很典型——__iter__方法没有返回迭代器对象!
让我拆解一下:你的iter_function是生成器函数,调用它的时候会返回一个迭代器没错,但你的__iter__方法只是调用了这个函数,却没有把生成的迭代器返回出去。Python中如果函数没有显式return语句,默认会返回None,这就导致iter(a)得到了None,自然触发TypeError。
修正后的类代码
只需要给__iter__加上return就行:
class fib: def __init__(self, items, iter_function): self.iter_function = iter_function self.items = items def __iter__(self): # 关键:返回迭代器函数生成的迭代器实例 return self.iter_function(self.items)
测试验证
用你的两个迭代器函数测试:
def iter_func(items): for item in items: yield item def iter_func2(items): for item in items: yield item*2 # 测试第一个迭代器 a = fib([1,2,3], iter_func) a_iterator = iter(a) print(next(a_iterator)) # 输出 1 print(next(a_iterator)) # 输出 2 print(next(a_iterator)) # 输出 3 # 测试第二个迭代器(元素翻倍) b = fib([1,2,3], iter_func2) b_iterator = iter(b) print(next(b_iterator)) # 输出 2 print(next(b_iterator)) # 输出 4 print(next(b_iterator)) # 输出 6
额外小建议
按照Python的命名规范,类名应该使用大驼峰命名法,比如把fib改成Fib,这样代码可读性更好~
内容的提问来源于stack exchange,提问作者Ahmadov
相关产品推荐
相关产品推荐

