我经常遇到这个名词,因为这个函数产生一些东西或者这个函数返回一些东西。我试图理解这一点,并阅读了python中的几篇文章。然后我在c ++中遇到了同一条语句:
某些表达式会产生对象,但会将它们作为右值而不是左值返回。
谁能以独立于语言的方式或详尽的方式帮助理解这两个术语,以便我轻松掌握。
编辑-如果两种语言都不相同,请用两种或两种您所熟悉的语言进行解释。
答案 0 :(得分:1)
在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实现类似于我们的收益示例:
int func() {
static i = 0;
return i++;
}
但是,这并不是说静态变量可以替换C ++中的yield
。只是,您可以在此(可能还有其他)示例中使用静态变量在C ++中实现相同的目的。
因此,简而言之,return
结束了两种语言的函数执行,而yield
允许函数进行某种恢复执行。直到至少C++20为止,C ++中的Python yield
才真正等效。
答案 1 :(得分:0)
您是否曾经尝试过遍历整个对象数据库?那是我第一次尝试,它很快耗尽了我所有的16GB内存,并使系统停止运行。这就是生成器存在的原因-可以按需加载数据,而不是一次加载所有数据(可能还有其他用途)。尝试阅读this帖子,其中有一些示例,将进行更详细的介绍。