2024-09-29 03:25:50 发布
网友
在一次采访中,面试官问我Python中使用的一些生成器。我知道生成器就像一个函数,它的值是yield,而不是return。在
yield
return
所以任何人告诉我是for/while循环就是生成器的一个例子。在
for
while
简而言之:没有,但还有其他形式的发电机。在
for/while循环是一个循环结构:它不发出值,因此不是生成器。在
尽管如此,还有其他构造生成器的方法。在
例如,yield是一个生成器:
def some_generator(xs): for x in xs: if x: yield x
但也有生成器表达式,如:
此外,在python-3.x中,range(..)、map(..)、filter(..)构造也是生成器。在
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和{}本身都不是生成器或迭代器。它们是执行迭代的控制结构。当然,您可以使用for或while来迭代生成器生成的项,并且可以使用for或{}在生成器的代码内执行迭代。但这两个事实都不能生成for或{}生成器。在
简而言之:没有,但还有其他形式的发电机。在
for
/while
循环是一个循环结构:它不发出值,因此不是生成器。在尽管如此,还有其他构造生成器的方法。在
例如,
yield
是一个生成器:但也有生成器表达式,如:
^{pr2}$此外,在python-3.x中,
range(..)
、map(..)
、filter(..)
构造也是生成器。在当然,您可以创建一个iterable(通过使用iterable模式):
the python wiki for generators中的第一行:
所以在你采访的背景下,我相信他们在找你来回答关于创造一个iterable的问题。在
wiki for a for loop
所以你可以变得迂腐,但一般来说,不,for循环不是生成器。在
while
和{for
或while
来迭代生成器生成的项,并且可以使用for
或{for
或{相关问题 更多 >
编程相关推荐