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
yakczh
V2EX  ›  Python

yield是不是有点象断点?

  •  
  •   yakczh · 2013-09-01 09:32:41 +08:00 · 3826 次点击
    这是一个创建于 3861 天前的主题,其中的信息可能已经有所发展或是发生改变。
    提前设置断点,然后在调用next触发
    14 条回复    1970-01-01 08:00:00 +08:00
    timonwong
        1
    timonwong  
       2013-09-01 09:48:35 +08:00
    continuation
    mikawudi
        2
    mikawudi  
       2013-09-01 11:13:54 +08:00
    csharp的?感觉更像迭带器模式的语法糖.
    msg7086
        3
    msg7086  
       2013-09-01 20:41:18 +08:00 via iPad
    从Ruby角度来说,相当于call block
    cj1324
        4
    cj1324  
       2013-09-01 23:47:48 +08:00
    yield 还能带参数。
    harmy
        5
    harmy  
       2013-09-01 23:59:22 +08:00
    你可以把它想象成小叮当的传送门
    Ryannnnnnn
        6
    Ryannnnnnn  
       2013-09-02 00:19:33 +08:00
    你可以把它想象成小叮当的传送门
    Mutoo
        7
    Mutoo  
       2013-09-02 09:25:55 +08:00
    协同程序(coroutine)是另一种有趣的开发方式,用起来确实有点像“断点”的感觉,但是它只pause一个coroutine而不影响其它线程。并且可以在yield和resume的时候交换数据。而且很容易用协同程序实现waitSecond();waithSignal();之类的方法,所以经常被使用在游戏开发中,实现剧情对话、AI之类的。

    相比之下还有另一种开发就是比较常见的 javascript 异步程序。
    yakczh
        8
    yakczh  
    OP
       2013-09-02 09:52:20 +08:00
    thead.join呢,也应该是pause主线程吧
    seeker
        9
    seeker  
       2013-09-02 10:17:25 +08:00
    那个语言的yeild?c# ruby scala还是其他?
    dorentus
        10
    dorentus  
       2013-09-02 10:27:07 +08:00
    @msg7086 ruby 和 python 的 yield 不是一个东西。


    @seeker 发在 python 节点,自然是 python 的 yield。
    yakczh
        11
    yakczh  
    OP
       2013-09-02 10:30:14 +08:00
    @seeker 是python
    6711411
        12
    6711411  
       2013-09-02 10:44:18 +08:00
    @meg7086 @dorentus ruby 有两个 yield, 一个 call block 一个 Fiber.yield
    msg7086
        13
    msg7086  
       2013-09-02 16:32:43 +08:00
    @dorentus 好像实现起来稍微有一些不同

    比如ruby里
    def f:
    yield 5
    print 'a'
    end

    f { print i }

    这里的yield 5就相当于 (print i)(5)

    python似乎会把这个流程反过来做?因为根据说明上写的,yield以后的常规语句 print 'a' 会被略过执行。

    求指导
    tioover
        14
    tioover  
       2013-09-03 01:59:19 +08:00 via Android
    才想起来,我写程序那么多年还没用过断点呢
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   3099 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 14:33 · PVG 22:33 · LAX 07:33 · JFK 10:33
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.