例如,性能之间是否存在差异:
for x in someFunc():
print x
和
result = someFunc()
for x in result:
print x
结果是现在生成器对象所以两个案例的操作方式相同吗?
答案 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
返回的任何内容都会被迭代,每个结果项都会分配给x
和print
。
唯一可能的区别是在循环之后,在第二种形式中你可以访问result
。如果它可能是有用的,例如一个序列(list
等),但如果它是一个(现在用尽的)迭代器,可能不是那么多。在第一种形式中,除了迭代之外,没有办法从someFunc
访问返回的值。
答案 2 :(得分:-1)
在您的示例中,在这两种情况下都会调用该函数一次。这是因为此处使用函数的 return 作为数据。对于所示的示例,首先调用该函数,并将返回数据用于整个for循环。在第二个示例中,您将函数的 return 设置为变量,并将该变量用于for循环。
因此,在这两种情况下,相同的数据将用于for循环。如果代码以这种方式构建,那么对于Java,C是相同的。