我想知道如何编写一个也可以选择返回值的生成器函数。在Python 2中,如果生成器函数尝试返回值,则会收到以下错误消息。 SyntaxError: 'return' with argument inside generator
是否可以编写一个函数,指定我是否要接收生成器?
例如:
def f(generator=False):
if generator:
yield 3
else:
return 3
答案 0 :(得分:4)
强制性阅读:Understanding Generators in Python
关键信息:
函数中任何地方的
#include <iostream> inline void loop(int depth, int max_depth, int* s, int* st, int* c, int* A){ //s = shape //st = stride //c = counter if (depth != max_depth){ for(c[depth] = 0; c[depth] < s[depth]; ++c[depth]){ loop(depth+1, max_depth, s, st, c, A); } } else { A[st[0]*c[0] + st[1]*c[1] + st[2]*c[2]]*=2; } } int main(void){ int A[100]; int s[] = {2,5,10}; int st[] = {50,10,1}; int c[] = {0,0,0}; //Version 1. for(c[0] = 0; c[0] < s[0]; ++c[0]) for(c[1] = 0; c[1] < s[1]; ++c[1]) for(c[2] = 0; c[2] < s[2]; ++c[2]) A[st[0]*c[0] + st[1]*c[1] + st[2]*c[2]]*=2; //Version 2 //(this should be fastest) int size = s[0]*s[1]*s[2]; for(int i = 0; i < size; ++i) A[i] *= 2; //Version 3 (fail. so many function calls...) loop(0, 2, s, st, c, A); for(int i = 0; i < 100; ++i) std::cout << A[i]; }
都会使它成为生成器。
解析代码时,函数被标记为生成器。因此,根据在运行时传递的参数,不可能切换函数行为(生成器/非生成器)。