那么这会
yield产生什么呢?
正如Paul Becotte 所评论的, yield没有价值收益None。
它是如何工作的?
从Python Generators wiki来看,yield语法是您需要告诉 Python 从函数生成可迭代对象的语法糖。它转换:
# a generator that yields items instead of returning a list
def firstn(n):
num = 0
while num < n:
yield num
num += 1
Run Code Online (Sandbox Code Playgroud)
进入:
# Using the generator pattern (an iterable)
class firstn(object):
def __init__(self, n):
self.n = n
self.num, self.nums = 0, []
def __iter__(self):
return self
# Python 3 compatibility
def __next__(self):
return self.next()
def next(self):
if self.num < self.n:
cur, self.num = self.num, self.num+1
return cur
else:
raise StopIteration()
Run Code Online (Sandbox Code Playgroud)
那我可以直接删除它吗?-评论
如果没有yield关键字,它只是一个返回 的函数None。
在 wiki 中继续下去,有一种方法可以在没有yield关键字的情况下创建迭代器。您可以将列表理解语法与(). 因此,继续一个相当简单的示例(这只是xrange, 的生成器版本range):
def firstn(n):
return (x for x in range(n))
Run Code Online (Sandbox Code Playgroud)
或者,我们可以将列表推导式视为包装在列表构造函数中的生成器表达式。
>>> list(firstn(10))
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> [x for x in range(10)]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
Run Code Online (Sandbox Code Playgroud)