迭代器,生成器,可迭代物件 列表推導式,列表生成式

2021-10-22 01:55:14 字數 1910 閱讀 4597

生成器 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...