一个在自定义迭代器中使用"in"语句的疑惑

2013-10-09 10:57:28 +08:00
 roricon
例子如下,来自海那边某教程。

#一个用迭代器实现的斐波那契函数类。
class Fibs:
def __init__(self):
self.i = 0
self.j = 1

def __str__(self):
return str(self.i)

def __iter__(self):
return self

def __next__(self):
self.i, self.j = self.j, self.i + self.j
return self.i

#实例化
fibs = Fibs()

#in
print(100 in fibs)

运行结果是,如果测试数正好是斐波那契数,那程序就会停下来返回True。但如果正好不是……那迭代器就会一直运行下去……

我的问题是,有没有什么方法,可以重构这个类体,可以判断"in"传递进来的数值,如果超过一个限度就抛出一个错误?

还请大家赐教。

还有不知道怎么保持源码缩进……如果有知道的还请顺便告诉一下。
2619 次点击
所在节点    Python
4 条回复
davepkxxx
2013-10-09 11:25:55 +08:00
mark
mengzhuo
2013-10-09 12:49:36 +08:00
roricon
2013-10-09 12:53:04 +08:00
@mengzhuo 太感谢了
mengzhuo
2013-10-09 12:58:19 +08:00
p.s.
貌似你这样判断复杂度是O(n)
加上empty dict cache会好很多(貌似没有别的办法了)
---------------------------
迭代器就是会不停地运算下去的
具体可以用itertools.islice让他有边界。
http://docs.python.org/2/library/itertools.html#itertools.islice

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/84947

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX