收益和收益如何彼此不同?

问题描述 投票:0回答:2

我经常遇到此术语,因为该函数产生某些东西或该函数返回某些东西。我试图理解这一点,并阅读了python中的几篇文章。然后我在c ++中遇到了同一条语句:

[某些表达式产生对象,但将它们作为右值而不是左值返回。

谁能以语言独立的方式或详细的方式帮助理解这两个术语,以便我轻松掌握。

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

python c++ expression rvalue lvalue
2个回答
0
投票

您是否曾经尝试遍历整个对象数据库?那是我第一次尝试,它很快耗尽了我所有的16GB内存,并使系统停止运行。这就是生成器存在的原因-可以按需加载数据,而不是一次加载所有数据(可能还有其他用途)。尝试阅读this帖子,其中有一些示例,将进行更详细的介绍。


0
投票

在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才真正等效。

© www.soinside.com 2019 - 2024. All rights reserved.