为什么我不能在收益率上使用yield?

iCo*_*dez -3 python yield return function python-2.x

我希望您考虑以下代码:

def func(alist):
    if len(alist) == 1:
        return arg * 2
    for item in alist:
        yield item * 2
Run Code Online (Sandbox Code Playgroud)

运行它时,出现以下错误:

SyntaxError: 'return' with argument inside generator
Run Code Online (Sandbox Code Playgroud)

现在,我意识到我无法做到这一点。但是,我想知道为什么。到底是什么导致Python抛出SyntaxError

use*_*ica 6

Python必须在编译字节码时确定函数是否为生成器。这是因为生成器的语义表明,生成器函数中的任何代码都不会在第一个next调用之前运行。生成器函数返回生成器迭代器,该生成器迭代器在next被调用时运行生成器代码。因此,Python无法运行某个函数,直到它碰到a yield或a 为止,才能确定该函数是否应该是生成器return。而是,yield函数中存在a 表示该函数是生成器。

  • 我接受你的回答,因为你回答了我想要的:“为什么不能这样做?”。其他答案更侧重于寻找解决方法(这很好,但不是我真正想要的)。谢谢。 (2认同)