生成器 generator
迭代器 iterator
為什麼`list`、`dict`、`str`等資料型別不是`iterator`?結論
val =
[i*i for i in
range(10
)if i %2==
1]# 只有i%2==1時,才對i進行平方操作
print
(val)
# 結果[1
,9,25
,49,81
]
val =
(i*i for i in
range(10
))print
(val)
print
(next
(val)
)print
(next
(val)
)# 結果
at 0x000001f779d7b258
>
01
帶判斷的形式(對變數的操作 for 變數 in 可迭代物件 if 對變數的判斷)
val =
(i*i for i in
range(10
)if i %2==
1)# 只有i%2==1時,才對i進行平方操作
print
(val)
print
(next
(val)
)print
(next
(val)
)# 結果
at 0x000002bc3f35b258
>
19
列表推導式用,列表生成式用()
列表推導式一次性生成列表,並返回。列表生成式生成生成器,並返回,用next()取值。
比較
def
fib(num)
: n, a, b =0,
0,1while n < num:
print
(b) a, b = b, a + b
n = n +
1return
('結束'
)
res = fib(4)
print
(res)
# 結果11
23結束
def
fib(num)
: n, a, b =0,
0,1while n < num:
yield b
a, b = b, a + b
n = n +
1# 使用next()變數,比較麻煩
res1 = fib(4)
print
(next
(res1)
)print
(next
(res1)
)print
(next
(res1)
)print
(next
(res1)
)print
('-'*40
)# 使用for進行遍歷
res2 = fib(4)
for elmnt in res2:
print
(elmnt)
# 結果11
23--
----
----
----
----
----
----
----
----
----
--11
23
生成器的遍歷方式
生成器:
可迭代物件:
可迭代物件 迭代器,生成器
可迭代物件 iterator 列表 集合 元組 字典 字串 生成器 我們可以使用isintance 判斷乙個物件是否是iterator物件 生成器 通過列表生成式,我們可以直接建立乙個列表,但是,受到記憶體限制,列表容量肯定是有限的,如果我們僅僅需要訪問前面幾個元素,如果列表元素可以按照某種演算法推...
可迭代物件 迭代器 生成器
可迭代物件 for迴圈機制 迭代器生成器 總結type所返回的型別是例項物件的類物件,而isinstance所進行的判斷則包含了例項物件的類物件及其父類。如圖 可迭代物件 迭代器 生成器所屬的型別分別為collections包裡的iterable,iterator,generator.實現了 ite...
可迭代物件 迭代器 生成器
名詞解釋 可迭代物件 1 遵循了 實現了 迭代器協議的物件。物件內部定義了乙個 iter 方法,以實現迭代器協議 2 列表 元組 字典 字串等等的都不是可迭代物件,當用for迴圈遍歷的時候,其實for先去執行了.iter 方法,將列表 元組 字串等變成乙個可迭代的物件,在進行迭代。iter 下有 n...