协程概念里的 yield,翻译成中文,最合适的解释是什么? - V2EX
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
zlel
V2EX    Python

协程概念里的 yield,翻译成中文,最合适的解释是什么?

  •  1
     
  •   zlel 2018-04-13 11:01:47 +08:00 13960 次点击
    这是一个创建于 2741 天前的主题,其中的信息可能已经有所发展或是发生改变。

    词典对 yield 的解释有:屈服;出产,产生;放弃。 我怎么感觉这几个意思放在 yield 的用法上都说的通,最准确的解释是哪种?

    102 条回复    2018-04-15 22:29:13 +08:00
    1  2  
    guangwong
        1
    guangwong  
       2018-04-13 11:05:00 +08:00   1
    退位
    InternetExplorer
        2
    InternetExplorer  
       2018-04-13 11:06:00 +08:00   1
    甩出
    zj299792458
        3
    zj299792458  
       2018-04-13 11:06:27 +08:00 via iPhone
    投降
    crossoverJie
        4
    crossoverJie  
       2018-04-13 11:07:05 +08:00
    求饶?
    starmoon1994
        5
    starmoon1994  
       2018-04-13 11:08:34 +08:00   3
    算是一种避让吧
    类似于开车的时候遇到了 120 急救车,需要先让急救车通过,你才能拿继续开
    YenvY
        6
    YenvY  
       2018-04-13 11:10:56 +08:00 via iPad
    让出
    LinusKou
        7
    LinusKou  
       2018-04-13 11:18:33 +08:00
    最准确的当然是不翻啊,翻过来就没意思了。
    est
        8
    est  
       2018-04-13 11:19:31 +08:00
    叫唤。
    leriou
        9
    leriou  
       2018-04-13 11:20:09 +08:00   1
    出让
    /table>
    padeoe
        10
    padeoe  
       2018-04-13 11:20:13 +08:00
    难道不是 “生成 /生产” 吗?
    wlwood
        11
    wlwood  
       2018-04-13 11:20:36 +08:00
    就是 yield. 中文意思还是 yield.
    HanningWu
        12
    HanningWu  
       2018-04-13 11:22:04 +08:00
    让行
    crb912
        13
    crb912  
       2018-04-13 11:25:23 +08:00 via Android
    看中文解释是不地道的。
    if one thing yields to another, it is replaced by that thing。也就是:让位于,被…所替代。

    所有协程的不同线程关系是同等的。屈服?就有点存在优先级的味道了。它不是子程序
    wlwood
        14
    wlwood  
       2018-04-13 11:28:24 +08:00
    其实我觉得,要是讲解给别人,不一定要给他讲这个中文意思啥。
    让他 yield 多几次,然后他就知道 yield 是啥了。
    paulzhang1992
        15
    paulzhang1992  
       2018-04-13 11:30:51 +08:00
    我之前是学土木的,yield strgenth 一般就指使物体形变无法复原的力,大概感觉一下,估计翻译成屈服?
    wlwood
        16
    wlwood  
       2018-04-13 11:34:11 +08:00
    @paulzhang1992 翻译没问题。但是,但是,看看屈服跟协程,会有关系么?刚开始看 yield 会更加一脸懵逼吧
    paulzhang1992
        17
    paulzhang1992  
       2018-04-13 11:37:36 +08:00
    @wlwood 就是这种名词纯翻译的话应该有规范,理解的话结合实际意义更方便一些,提出 yield strength 就是觉得能有更直观的感受,cs 我也是自学刚刚入门
    zhang1215
        18
    zhang1215  
       2018-04-13 11:37:56 +08:00
    让步
    vegito2002
        19
    vegito2002  
       2018-04-13 11:40:10 +08:00
    认怂
    mokeyjay
        20
    mokeyjay  
       2018-04-13 11:41:46 +08:00
    参考 PHP 官方中文文档的话,应该翻译为“生成”、“生成器”
    xzpjerry731
        21
    xzpjerry731  
       2018-04-13 11:49:28 +08:00   1
    生产呀。yield 还有产量的意思
    neoblackcap
        22
    neoblackcap  
       2018-04-13 11:51:46 +08:00   3
    让渡或者易位,这里我觉得意译更重要,想想鲁棒性
    chengxiao
        23
    chengxiao  
       2018-04-13 11:53:22 +08:00
    走你
    newtype0092
        24
    newtype0092  
       2018-04-13 11:55:01 +08:00   7
    你行你上
    nicevar
        25
    nicevar  
       2018-04-13 11:55:56 +08:00
    我丢
    pathbox
        26
    pathbox  
       2018-04-13 11:58:51 +08:00 via iPhone
    不翻译
    fogisland
        27
    fogisland  
       2018-04-13 11:58:54 +08:00
    @newtype0092 哈哈哈,很妙
    zrq495
        28
    zrq495  
       2018-04-13 12:03:04 +08:00 via iPhone
    禅让
    xmadi
        29
    xmadi  
       2018-04-13 12:08:53 +08:00 via iPhone
    生成 yield 这语法是来自生成器的 如果从协程的角度没法翻译
    ericls
        30
    ericls  
       2018-04-13 12:12:00 +08:00 via iPhone
    @paulzhang1992 哈哈 我也是学土木的

    Yield 这里有两个意思 交出控制权 和产出一个值 两个意思都用上了 很妙啊
    binux
        31
    binux  
       2018-04-13 12:12:48 +08:00
    让道
    在国外开车,看到 yield 就知道这个 yield 用得很形象了
    catror
        32
    catror  
       2018-04-13 12:13:09 +08:00
    我休息下,你上吧
    MeteorCat
        33
    MeteorCat  
       2018-04-13 12:13:59 +08:00 via Android
    让出+1
    guyskk0x0
        34
    guyskk0x0  
       2018-04-13 12:48:27 +08:00 via Android
    交棒
    接力赛,把接力棒交给另一个协程
    shihty5
        35
    shihty5  
       2018-04-13 12:53:55 +08:00
    礼让(给这个线程)
    CYKun
        36
    CYKun  
       2018-04-13 13:00:39 +08:00 via Android
    看维基里关于生成器的解释:

    A generator is very similar to a function that returns an array, in that a generator has parameters, can be called, and generates a sequence of values. However, instead of building an array containing all the values and returning them all at once, a generator yields the values one at a time, which requires less memory and allows the caller to get started processing the first few values immediately.

    生成器类似于一个返回值为数组的函数;不同于普通函数直接构造并返回( return )整个数组的做法,生成器每次返回( yield )其中的一个值。

    从行文里对 yield 的用法来看,yield 其实就是返回的意思。从逻辑上看,yield 跟 return 的行为也是类似的,都是结束当前函数执行,回到调用处并提供一个返回值。

    所以 yield 的含义没有大家想的那么深奥,其实就是在 return 这个关键字被占用了的情况下,找了一个合适的近义词来表示生成器里这种特殊的“返回”而已。

    相应的,如果我们要把 yield 翻译成中文的话,那也找一个比较合适的、与返回近义的词就行。如回归、交付之类的都可以。
    northisland
        37
    northisland  
       2018-04-13 13:01:00 +08:00
    虚报工作量
    northisland
        38
    northisland  
       2018-04-13 13:02:06 +08:00
    抱歉,忘了不在 python 节点。
    vlike
        39
    vlike  
       2018-04-13 13:04:31 +08:00 via Android
    挂起
    xpresslink
        40
    xpresslink  
       2018-04-13 13:19:28 +08:00
    @northisland 主流编程语言中很多都有这个关键字,如 C#,PHP,Javascript 之类,java 也有 yeild 方法。
    基本都是协程相关。
    kaedea
        41
    kaedea  
       2018-04-13 13:45:24 +08:00 via Android
    认怂
    CSM
        42
    CSM  
       2018-04-13 13:51:45 +08:00 via Android
    产出
    安道翻译的《流畅的 Python 》中如是翻译 yield

    只要和 return 的翻译区别开就行啦
    hheedat
        43
    hheedat  
       2018-04-13 13:56:00 +08:00
    景甜
    luoway
        44
    luoway  
       2018-04-13 13:57:01 +08:00
    看例句
    yield the floor to sb 让插嘴
    yield the right way to sb/sth 让行
    JamesRuan
        45
    JamesRuan  
       2018-04-13 14:16:04 +08:00
    出让
    xcatliu
        46
    xcatliu  
       2018-04-13 14:17:29 +08:00
    丫得
    Rufeer
        47
    Rufeer  
       2018-04-13 14:19:04 +08:00
    刚好看到,《 Python 核心编程》里面是这样写的:
    线程包括开始、执行顺序和结束三部分。它有一个指令指针,用于记录当前运行的上下 文。当其他线程运行时,它可以被抢占(中断)和临时挂起(也称为睡眠)这种做法叫 做让步(yielding)。
    geelaw
        48
    geelaw  
       2018-04-13 14:23:11 +08:00 via iPhone
    “让出”

    This is the same “ yield ” as in that a thread (voluntarily) yields (the CPU).
    pigzilla
        49
    pigzilla  
       2018-04-13 14:24:39 +08:00   17
    协程( coroutine )的协( co )是协作( cooperative )的意思,与之相对的是抢占式( preemptive )。

    抢占式,就是轮到我执行了,现在执行的代码会被强制保存上下文然后暂停执行,换我执行。然而风水轮流转,我也会被这么抢占。抢占的过程通常是 OS 管理的,所以有可能抢占的时机并不是很合适因为 OS 不知道你每个线程现在在做啥合不合适暂停,但好在可以保证所有代码都能得到执行。

    协作式,就是我执行过程中,到了一个阶段发现没事可做了(通常是等待 IO ),这时候 yield,主动把 CPU 资源让出来让别的代码去执行。同样的,别的代码也可能会在合适的时机主动暂停执行,让我再回来继续执行,如果我需要的其它资源已经到位( IO 数据已经有了)。协程的好处是这个让出的时机是开发时在代码里面明确写清楚了的( yield 关键字),所以让出的时机可以更合理。

    yield 带来两个主要结果:1 )主动暂停代码的执行,让渡自己的资源占用; 2 )已经执行的代码可能产出一个中间成果。而事实上 yield 这个词在英文的本意就正好带有这两个含义。

    因为谈到协程通常是和抢占式的多线程相比,也就是更注重第一个含义 /结果,所以 yield 在协程这个概念里面的最好翻译是“让出”。当然最好是不翻译,直接用 yield。

    说 yield 类似于 return 的,只看到了 yield 的第二个结果,忽略了第一个。
    paparika
        50
    paparika  
       2018-04-13 14:28:33 +08:00
    让渡+1 说生产产出的不知道咋想的
    yoloppp
        51
    yoloppp  
       2018-04-13 14:38:44 +08:00
    甩锅
    scriptB0y
        52
    scriptB0y  
       2018-04-13 14:48:19 +08:00
    呐喊
    we3613040
        53
    we3613040  
       2018-04-13 15:48:07 +08:00
    @pigzilla 厉害,豁然开朗
    qiyuey
        54
    qiyuey  
       2018-04-13 15:49:09 +08:00
    我想到了 [套接字]
    zhwithsweet
        55
    zhwithsweet  
       2018-04-13 15:57:33 +08:00
    不如叫 乐不思蜀 吧
    weizhen199
        56
    weizhen199  
       2018-04-13 16:31:27 +08:00
    回避,全部回避!
    winglight2016
        57
    winglight2016  
       2018-04-13 16:34:49 +08:00
    关键字还是不要翻的好,记得以前 UML 里 usecase 被翻译成用况,被人骂死~~~
    heiher
        58
    heiher  
       2018-04-13 16:56:40 +08:00
    滚蛋
    kaedea
        59
    kaedea  
       2018-04-13 17:23:56 +08:00   4
    为了表现的友好一点:禅位
    mengzhuo
        60
    mengzhuo  
       2018-04-13 18:15:05 +08:00
    @pigzilla #49 还可以补充一下,一些 Python 第三方库,例如 gevent,或者 Go 语言层面都消除了 yield,但背后仍然是协作式的调度。
    wyntalgeer
        61
    wyntalgeer  
       2018-04-13 18:39:03 +08:00
    备胎
    patx
        62
    patx  
       2018-04-13 19:15:41 +08:00
    意译的话就是:生成迭代器。其他的什么生产、让渡,只会跟鲁棒性和套接字一样,搞得大家莫名其妙。
    glasslion
        63
    glasslion  
       2018-04-13 19:20:30 +08:00
    还是不翻译为好
    neoblackcap
        64
    neoblackcap  
       2018-04-13 19:56:40 +08:00
    @mengzhuo golang 不是全部都是协作式的,也有抢占式调度在里面跟 Python 这些语言不一样
    shiabo1121
        65
    shiabo1121  
       2018-04-13 20:30:10 +08:00
    挂起
    to2false
        66
    to2false  
       2018-04-13 20:37:54 +08:00 via Android
    让出
    honeycomb
        67
    honeycomb  
       2018-04-13 21:13:54 +08:00 via Android
    叫避让,它的一个用处是开车的时候,转弯让对面直行的动作,就叫 yield
    CloudnuY
        68
    CloudnuY  
       2018-04-13 22:19:38 +08:00
    丫的
    johnnie502
        69
    johnnie502  
       2018-04-14 00:28:46 +08:00
    麻烦让一让
    Qlccks2
        70
    Qlccks2  
       2018-04-14 00:53:26 +08:00 via iPhone   3
    另请高明
    shutongxinq
        71
    shutongxiq  
       2018-04-14 01:37:07 +08:00
    @CSM 这个翻译可以和“常凯申”一拼高下。
    SuperMild
        72
    SuperMild  
       2018-04-14 01:45:52 +08:00
    上面很多人说“避让”之类的,可能不对,比如

    a generator yields the values one at a time

    这是产出或返回一个数值,无法说避让那个数值啊。
    msg7086
        73
    msg7086  
       2018-04-14 01:56:22 +08:00
    甩锅
    darluc
        74
    darluc  
       2018-04-14 02:29:24 +08:00
    禅让咯?
    wavingclear
        75
    wavingclear  
       2018-04-14 03:58:18 +08:00
    让出这个词有误解歧义,虽然出字是代表生产出这个含义。return 也可以返回值,没人说叫返出?
    wavingclear
        76
    wavingclear  
       2018-04-14 04:10:43 +08:00
    让回,让停,让行。
    让回的返回值这么表达有点别扭。让停是自己视角,让行是生活用语,停车让行。让行应该最好。
    amai
        77
    amai  
       2018-04-14 05:33:54 +08:00
    抛出
    qunwang6
        78
    qunwang6  
       2018-04-14 07:55:04 +08:00
    让出+1
    tomato3
        79
    tomato3  
       2018-04-14 08:42:22 +08:00 via Android
    产出
    zealinux
        80
    zealinux  
       2018-04-14 09:23:02 +08:00
    让座
    chesterzzy
        81
    chesterzzy  
       2018-04-14 09:59:17 +08:00
    走你
    andrewzhou
        82
    andrewzhou  
       2018-04-14 10:02:25 +08:00
    蹦噔
    maxco292
        83
    maxco292  
       2018-04-14 10:14:40 +08:00 via Android
    让权 ------ 让出执行权
    bellchu
        84
    bellchu  
       2018-04-14 10:20:59 +08:00
    同交规
    watzds
        85
    watzds  
       2018-04-14 10:52:35 +08:00 via Android
    谦让,退位
    Mutoo
        87
    Mutoo  
       2018-04-14 11:04:36 +08:00
    yield: "诺"
    wdhwg001
        88
    wdhwg001  
       2018-04-14 11:10:46 +08:00 via iPhone
    “让出”吧。

    我曾想过“让回”会不会比“让出”好,因为“让回”与“返回”更工整,且“让回”后面接名词表示内容而不是目标,如“让回一个苹果”和“让出这个座位”。

    但是…

    “返回”后面接名词是表示目标的,如“返回房间”。它本身也带来了理解的问题,如“返回函数 A ”是“以函数 A 返回”还是“返回到函数 A ”。

    在这个方面,“让出”反而与“返回”有着惊人的相似度,我们同样可以像理解“返回 0.15 ”一样理解“让出 0.15 ”的含义,这文法不通,但已是惯例。

    所以,“让出”比较好。
    wl99
        89
    wl99  
       2018-04-14 11:19:46 +08:00
    一位搞理论研究的老师和我们说的是 产出
    yogogo
        90
    yogogo  
       2018-04-14 11:24:10 +08:00
    生成器
    fansekey
        91
    fansekey  
       2018-04-14 11:24:12 +08:00 via Android
    让出
    ech0x
        92
    ech0x  
       2018-04-14 11:38:11 +08:00 via iPhone
    我又想起 enable 被翻译成“使能”的例子了。这种关键字还是不要轻易翻译了吧,多用用就会了。
    LuckCode
        93
    LuckCode  
       2018-04-14 11:44:50 +08:00 via iPhone
    @nicevar 哈哈,笑出声
    liuxu
        94
    liuxu  
       2018-04-14 11:47:44 +08:00
    上抛
    lishali12345
        95
    lishali12345  
       2018-04-14 11:52:32 +08:00
    @Mutoo 棒呆
    mcfog
        96
    mcfog  
       2018-04-14 11:57:05 +08:00
    所以从最开始标题就误导的不行,凭啥 yield 就成了协程的一部分了……那 return 是 OO 的一部分咯(滑稽
    miketeam
        97
    miketeam  
       2018-04-14 12:31:53 +08:00 via iPhone
    野滴
    miketeam
        98
    miketeam  
       2018-04-14 12:33:35 +08:00 via iPhone
    读书读傻了都,字面意思不就很好吗
    clino
        99
    clino  
       2018-04-14 13:35:42 +08:00 via Android
    抛出(结果)
    jiangnanyanyu
        100
    jiangnanyanyu  
       2018-04-14 14:33:57 +08:00 via Android
    我运行不下去了
    1  2  
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1130 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 31ms UTC 23:12 PVG 07:12 LAX 16:12 JFK 19:12
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86