python是否支持生成对象?

时间:2015-04-22 11:10:36

标签: python for-loop generator

例如,性能之间是否存在差异:

for x in someFunc(): 
    print x

result = someFunc()
for x in result:
    print x

结果是现在生成器对象所以两个案例的操作方式相同吗?

3 个答案:

答案 0 :(得分:0)

对于C / C ++,如果编译器无法优化该段代码,则会始终调用它。你可以自己尝试一下:

#include <cstdio>
#include <cstring>

size_t getLength(char *s)
{   puts("Called");
    return strlen(s);
}

int main(void)
{   char s[] = "test";
    for(int i = 0; i < getLength(s); i++)
        ;
    return 0;
}

输出:

Called
Called
Called
Called
Called

答案 1 :(得分:0)

在Python 中,完全没有区别:

for x in someFunc(): 
    print x

result = someFunc()
for x in result:
    print x

无论哪种方式,从someFunc返回的任何内容都会被迭代,每个结果项都会分配给xprint

唯一可能的区别是循环之后,在第二种形式中你可以访问result。如果它可能是有用的,例如一个序列(list等),但如果它是一个(现在用尽的)迭代器,可能不是那么多。在第一种形式中,除了迭代之外,没有办法从someFunc访问返回的值。

答案 2 :(得分:-1)

在您的示例中,在这两种情况下都会调用该函数一次。这是因为此处使用函数的 return 作为数据。对于所示的示例,首先调用该函数,并将返回数据用于整个for循环。在第二个示例中,您将函数的 return 设置为变量,并将该变量用于for循环。

因此,在这两种情况下,相同的数据将用于for循环。如果代码以这种方式构建,那么对于Java,C是相同的。