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 · 12955 次点击
    这是一个创建于 2449 天前的主题,其中的信息可能已经有所发展或是发生改变。

    词典对 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
    出让
    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
    shutongxinq  
       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   ·   实用小工具   ·   2716 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 145ms · UTC 15:24 · PVG 23:24 · LAX 07:24 · JFK 10:24
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.