在面試中,面試官問我一些Python中使用的生成器。我知道一個發生器就像一個yield
值而不是return
的函數。是for/while循環來自python是一個生成器
所以任何一個告訴我是for
/while
循環是發生器的一個例子。
在面試中,面試官問我一些Python中使用的生成器。我知道一個發生器就像一個yield
值而不是return
的函數。是for/while循環來自python是一個生成器
所以任何一個告訴我是for
/while
循環是發生器的一個例子。
簡答:沒有,但還有其他形式的發電機。
甲for
/while
迴路是環結構:它不發射值,因此不是一臺發電機。
儘管如此,還有其他方式來構造發電機。
與yield
您的例子是例如發電機:
def some_generator(xs):
for x in xs:
if x:
yield x
但也有生成器表達式,如:
(x for x in xs if x)
此外,在python-3.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()
謝謝..這是一個很好的幫助:) – Sanjay
其實[[range]](https://docs.python.org/3/library/functions.html#func-range)不是(不再?)a generator ... –
@hiroprotagonist:'range(..)'構造了一個'
while
和for
本身都不是生成器或迭代器。它們是執行迭代的控制結構。當然,您可以使用for
或while
遍歷生成器生成的項目,並且可以使用for
或while
在生成器的代碼內執行迭代。但是這些事實都不能使for
或while
生成器生成。
的第一行the python wiki for generators:
發電機功能,讓你聲明一個像迭代器一樣的函數,例如它可以在for循環中使用。
因此,在面試的背景下,我相信他們正在尋找你來回答關於創建一個迭代。
在Python這被控制,而不是由生成適當的序列。
所以你可以得到迂腐,但一般來說,不,一個for循環不是一個生成器。
for和while是循環結構,您可以使用它們遍歷生成器。您可以將生成器的某些元素轉換爲列表。
一個循環可以*遍歷一個生成器,它本身不是一個生成器。當然,除非你在討論'(x for x in y)'生成器語法。 – deceze
AFAIK,它不是。它是一個循環結構。不過請注意,還有其他形式的發電機。 –
可能是這個鏈接可以幫助你 - http://anandology.com/python-practice-book/iterators.html –