在Python中,通过生成器表达式创建生成器对象与使用yield语句之间有什么区别吗?
使用产量:
def Generator(x, y):
for i in xrange(x):
for j in xrange(y):
yield(i, j)
Run Code Online (Sandbox Code Playgroud)
使用生成器表达:
def Generator(x, y):
return ((i, j) for i in xrange(x) for j in xrange(y))
Run Code Online (Sandbox Code Playgroud)
这两个函数都返回生成元组的生成器对象,例如(0,0),(0,1)等.
一个或另一个的任何优点?思考?
谢谢大家!这些答案中有很多很棒的信息和进一步的参考资料!
在Python 2中,当函数定义中的return与yield一起时,出现了错误.但对于Python 3.3中的这段代码
def f():
return 3
yield 2
x = f()
print(x.__next__())
Run Code Online (Sandbox Code Playgroud)
没有错误,返回用于带有yield的函数.但是,当__next__调用该函数时,会抛出异常StopIteration.为什么不只是返回价值3?这种回报是否被忽略了?
我想知道在函数中执行完所有yield之后如何获取函数的返回值,如下所示:
def gen_test():
l = []
for i in range(6):
l.append(i)
yield i
# i want to know this value after all iteration of yield
return l
Run Code Online (Sandbox Code Playgroud)