如果没有给出论证,“收益”会带来什么回报?

时间:2018-03-27 06:44:06

标签: python

有一些python函数的例子包含yield - 但没有任何参数。

示例:herehere以及here

那么那个yield会产生什么呢?它是如何工作的?

1 个答案:

答案 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关键字的迭代器。您将列表理解语法与()一起使用。所以继续这个相当简单的例子(只是xrangerange的生成器版本):

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]