python - yield 和返回有何不同?

标签 python c++ expression rvalue lvalue

我经常遇到这个术语,这个函数产生一些东西或者这个函数返回一些东西。我试图理解这一点并阅读了一些 python 文章。然后我在 C++ 中遇到了相同的语句:

some expressions yield objects but return them as rvalues, not lvalues.

任何人都可以帮助以独立于语言的方式或详细方式理解这两个术语,以便我可以轻松掌握。

编辑 - 如果它们在两种语言中有所不同,请用两种语言或您知道的任何一种语言进行解释。

最佳答案

在 Python 中,yield 用于 generation .例如:

def func():
    i =0
    while True:
        i += 1
        yield i

如果我没记错 Python,这应该允许该函数基本上暂停执行并被一遍又一遍地调用。这可以生成一些序列,如 {0,1,2,3...}

另一方面,return 只返回一个值并结束执行:

def func():
    i =0
    while True:
        i += 1
        return i

这应该总是返回 0,因为函数完全结束执行所以 i 每次都超出范围。


另一方面,据我所知,C++ 没有与 yield 直接等价的东西(显然 in the new C++20 除外,它添加了一个等价物),而它确实有等同于(在所有版本中)此处的 return。当然,它被称为 return

也就是说,C++ 可以使用 static variables 实现类似于我们的 yield 示例的东西。 :

int func() {
    static i = 0;
    return i++;
}

但是,这并不是说静态变量可以替代 C++ 中的 yield。只是您可以在这个(可能还有其他)示例中使用静态变量在 C++ 中实现同样的事情。


因此,简而言之,return 以两种语言结束函数的执行,而 yield 允许函数恢复执行。至少在 C++20 之前,Python 的 yield 在 C++ 中没有真正的等价物。 .

关于python - yield 和返回有何不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58495517/

相关文章:

c++ - 切断一个字符的末尾 *

c++ - 如果我将一个无符号整数与一个负整数相加并且算术结果为正,会发生什么情况?

R:如何在表达式中获取和设置命名参数

python - 为什么 Keras Tokenizer 文本到序列对所有文本返回相同的值?

python - 输入深度必须能被过滤深度 : 1 vs 3 [[{{node model/conv1_conv/Conv2D}}]] 整除

python - 使用 pyodbc 批量插入 + SQL Server 使用 None/Nan 很慢 + 解决方法

c++ - 将整数转换为位

python - 用于 cumsum 的 Groupby 函数并重置其索引

c++ - 从位置 i 开始生成 n 个掩码的最快方法

c - 如何在程序中稍后使用丢弃的值