来自python的for/while循环是gen

2024-09-29 03:25:50 发布

您现在位置:Python中文网/ 问答频道 /正文

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

所以任何人告诉我是for/while循环就是生成器的一个例子。在


Tags: 函数forreturn例子yieldwhile面试官
3条回答

简而言之:没有,但还有其他形式的发电机。在

for/while循环是一个循环结构:它不发出值,因此不是生成器。在

尽管如此,还有其他构造生成器的方法。在

例如,yield是一个生成器:

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

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

^{pr2}$

此外,在中,range(..)map(..)filter(..)构造也是生成器。在

当然,您可以创建一个iterable(通过使用iterable模式):

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()

the python wiki for generators中的第一行:

Generators functions allow you to declare a function that behaves like an iterator, i.e. it can be used in a for loop.

所以在你采访的背景下,我相信他们在找你来回答关于创造一个iterable的问题。在

wiki for a for loop

In Python this is controlled instead by generating the appropriate sequence.

所以你可以变得迂腐,但一般来说,不,for循环不是生成器。在

while和{}本身都不是生成器或迭代器。它们是执行迭代的控制结构。当然,您可以使用forwhile来迭代生成器生成的项,并且可以使用for或{}在生成器的代码内执行迭代。但这两个事实都不能生成for或{}生成器。在

相关问题 更多 >