收益率和收益率有何不同?

时间:2019-10-22 00:01:51

标签: python c++ expression rvalue lvalue

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

  

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

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

编辑-如果两种语言都不相同,请用两种或两种您所熟悉的语言进行解释。

2 个答案:

答案 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帖子,其中有一些示例,将进行更详细的介绍。

相关问题