V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
roricon
V2EX  ›  Python

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

  •  
  •   roricon ·
    soloradish · 2013-10-09 10:57:28 +08:00 · 2611 次点击
    这是一个创建于 3854 天前的主题,其中的信息可能已经有所发展或是发生改变。
    例子如下,来自海那边某教程。

    #一个用迭代器实现的斐波那契函数类。
    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"传递进来的数值,如果超过一个限度就抛出一个错误?

    还请大家赐教。

    还有不知道怎么保持源码缩进……如果有知道的还请顺便告诉一下。
    4 条回复    1970-01-01 08:00:00 +08:00
    davepkxxx
        1
    davepkxxx  
       2013-10-09 11:25:55 +08:00
    mark
    mengzhuo
        2
    mengzhuo  
       2013-10-09 12:49:36 +08:00   ❤️ 2
    roricon
        3
    roricon  
    OP
       2013-10-09 12:53:04 +08:00
    @mengzhuo 太感谢了
    mengzhuo
        4
    mengzhuo  
       2013-10-09 12:58:19 +08:00   ❤️ 1
    p.s.
    貌似你这样判断复杂度是O(n)
    加上empty dict cache会好很多(貌似没有别的办法了)
    ---------------------------
    迭代器就是会不停地运算下去的
    具体可以用itertools.islice让他有边界。
    http://docs.python.org/2/library/itertools.html#itertools.islice
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2687 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 15:34 · PVG 23:34 · LAX 08:34 · JFK 11:34
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.