[英]Unexpected output in Python Generators
我試圖找出Python中的生成器,我試圖過濾列表並對它們進行平方並返回輸出。
list = [1, 4, -5, 10, -7, 2, 3, -1]
def square_generator(optional_parameter):
return (x ** 2 for x in list if x > optional_parameter)
g = (square_generator(i) for i in list)
h = square_generator(0)
print h
我做錯了什么?
定義生成器時,必須迭代它,如下所示:
for x in h:
print x
如果您只是嘗試打印生成器,那么您將獲得該對象:
<generator object <genexpr> at 0x02A4FB48>
如果要生成列表,只需使用列表推導:
def square_generator(optional_parameter):
return [x ** 2 for x in somelist if x > optional_parameter]
或者在生成器上轉動調用list()
(前提是您沒有使用list
作為本地名稱):
list(h)
你的發電機工作正常,否則:
>>> somelist = [1, 4, -5, 10, -7, 2, 3, -1]
>>> def square_generator(optional_parameter):
... return (x ** 2 for x in somelist if x > optional_parameter)
...
>>> list(square_generator(0))
[1, 16, 100, 4, 9]
square_generator
函數返回一個生成器對象。 生成器是迭代器,它們不是列表,而是包含用於生成序列的下一個元素的規則的對象。
因此,當您的函數返回時,它不會計算平方。 它們僅在需要時計算。 因此,您需要遍歷序列以獲取元素。 在您要求查看它們之前,它們根本不存在。
這也意味着當你遍歷列表時它會消失。 如果你想要它是持久的,你必須看看Martin Pieters的答案,即使用列表而不是生成器/迭代器。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.