答案 0 :(得分:3)
那么那个yield
会产生什么呢?
由于commented by 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
成:
# 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()
所以我可以删除它? - comment
如果没有yield
关键字,它只是一个返回None
的函数。
继续在wiki中,有一种方法可以创建没有yield
关键字的迭代器。您将列表理解语法与()
一起使用。所以继续这个相当简单的例子(只是xrange
,range
的生成器版本):
def firstn(n):
return (x for x in range(n))
或者,我们可以将列表推导视为包含在列表构造函数中的生成器表达式。
>>> 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]