python - 是来自 python 的 for/while 循环是一个生成器

标签 python generator yield

在一次面试中,面试官问我Python中使用的一些生成器。我知道生成器就像一个yield 值而不是return 的函数。

所以有人告诉我,for/while 循环是生成器的一个例子。

最佳答案

简短回答:没有,但还有其他形式的生成器。

for/while 循环是一个循环结构:它不发出值,因此不是发电机。

不过,还有其他构造生成器的方法

你用 yield 举例是一个生成器:

def some_generator(xs):
    for x in xs:
        if x:
            yield x

但也有生成器表达式,例如:

(x for x in xs if x)

此外在 range(..)map(..)filter(..) 结构是生成器好吧。

当然,您可以制作一个可迭代(通过使用可迭代模式):

class some_generator(object):
    def __init__(self, xs):
        self.n = n
        self.idx = 0

    def __iter__(self):
        return self

    def __next__(self):
        return self.next()

    def next(self):
        while self.num < len(self.xs) and not self.xs[self.num]:
            self.num += 1
        if self.num < len(self.xs):
            res = self.xs[self.num]
            self.num += 1
            return res
        else:
            raise StopIteration()

关于python - 是来自 python 的 for/while 循环是一个生成器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44516289/

相关文章:

python - 如何快速阅读excel?

Python:Pandas:滚动窗口 - mean() 有效但 variance() 无效?

python - 是否有一种内置方法可以将无参数函数转换为生成器?

python - python 生成器函数中引发的 StopIteration 异常处理

python - 值错误 : Cannot serialize function: lambda while using makemigrations

python - Hg Git Pull 导致 Too Many Open Files 错误

Python 变量在生成器中丢失范围?

python - 为什么变量的显式定义可以调用函数,而迭代器却不行?

ruby - 你如何使用 Ruby block 来有条件地执行某些东西?

python - 用可迭代的东西替换函数