如果没有给出参数,“yield”会返回什么?

Ale*_*lex 6 python

有一些 python 函数的示例包含yield- 但不带任何参数。

示例:此处此处此处

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

icc*_*c97 4

那么这会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)

  • 这似乎并没有完全解决这个问题,据我所知,它是在询问“yield”作为一个独立的语句(而不是例如“yield num”)。 (2认同)
  • pytest 包有 [examples](https://docs.pytest.org/en/latest/example/simple.html) 包含: ``` 结果=产量代表=结果.get_result() ``` 我不理解这段代码……但它有效,并且“yield”显然返回了“None”以外的东西。 (2认同)