我经常遇到此术语,因为该函数产生某些东西或该函数返回某些东西。我试图理解这一点,并阅读了python中的几篇文章。然后我在c ++中遇到了同一条语句:
[某些表达式产生对象,但将它们作为右值而不是左值返回。
谁能以语言独立的方式或详细的方式帮助理解这两个术语,以便我轻松掌握。
编辑-如果两种语言都不同,请用两种或您所知道的任何一种进行解释。
您是否曾经尝试遍历整个对象数据库?那是我第一次尝试,它很快耗尽了我所有的16GB内存,并使系统停止运行。这就是生成器存在的原因-可以按需加载数据,而不是一次加载所有数据(可能还有其他用途)。尝试阅读this帖子,其中有一些示例,将进行更详细的介绍。
在Python中,yield
用于generation。例如:
def func():
i =0
yield i+=1
如果我正确地记住Python,这应该允许一遍又一遍调用此函数并生成类似{0,1,2,3...}
的序列。
另一方面,return
仅返回一个值并结束执行:
def func():
i =0
return i+=1
这应该总是返回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 ++中,直到yield
之前,Python的C++20才真正等效。