我经常遇到这个术语,这个函数产生一些东西或者这个函数返回一些东西。我试图理解这一点并阅读了一些 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/