【发布时间】:2014-01-05 07:13:30
【问题描述】:
我正在尝试创建一个返回对象或用作生成器的函数。
这是一个坏主意,因为作为最佳实践,您希望函数可靠地返回相同类型的值,但为了科学的利益...
我使用的是 Python 2,因此 range 返回一个列表,而 xrange 是一个可迭代对象(有趣的是,它还提供了一个 __len__)。
def xr(start, stop=None, step=1, gen=True):
if stop is None:
start, stop = 0, start
if gen == True:
for i in xrange(start, stop, step):
yield i
else:
return range(start, stop, step)
我得到这个错误:
File "<stdin>", line 8
SyntaxError: 'return' with argument inside generator
问题:
为什么(除了明显的“你不能在一个函数中同时拥有 yield 和 return”,假设这是正确的)它会这样做?查看我的代码,并不清楚为什么这样做会不好。
我将如何尝试解决这个问题?我知道我可以返回 xrange 而不是从 xrange 中产生每个项目,因此我可以返回在另一个函数中创建的生成器,但是有更好的方法吗?
【问题讨论】: