Python基礎 迭代器

2021-09-27 03:47:06 字數 2531 閱讀 4063

二、生成器

三、推導表示式

迭代器就是乙個容器,將可迭代物件通過iter包起來

li =[1

,2,3

,4,5

]a = liter(li)

# 迭代器

print

(next

(a))

# 1print

(next

(a))

# 2print

(next

(a))

# 3 乙個個取值

"""1.訪問者不需要去關心內部結構,只需要通過next不斷去取下乙個內容。

2.只能從頭到尾依次訪問,不能回退

3.便於迴圈比較大的資料集合,節省記憶體

"""

__next__:可迭代物件和迭代器的區別

可迭代物件有 __liter__

迭代器 __liter__, __next__

兩者都可以 for 迴圈

li =[1

,2,3

,4,5

]itr =

iter

(li)

try:

while

true

:# 死迴圈

b =next

(itr)

print

(b)# stopiteration 異常 超出範圍

except stopiteration:

pass

class

mylist

:def

__iter__

(self)

:return

iter([

1,2,

3,4,

5])a = mylist(

)for i in a:

print

(i)

生成器:自定義迭代器更優雅的方式,本質還是乙個迭代器

類似函式的邏輯

def

func()

:# 容器

yield

1

deff(

):yield

1yield

5yield

8g = f(

)print

(g)# 生成器物件

print

(next

(g))

# 1print

(next

(g))

# 5for i in g:

print

(i)# 1 5 8

deff(

):print(1

)yield

5print(2

)yield

9print(3

)yield

8g = f(

)# 生成器物件

# 取值

next

(g)# 執行函式,至yidld終止 結果 1

# 用變數去接收

res =

next

(g)# 返回yidld後面的值 結果 5

print

(res)

res =

next

(g)# 再次返回 結果 9

print

(res)

# 魔術方法

res = g.__next__(

)# 功能和上面一樣

print

(res)

# 結果 8

# 如果超出取值範圍會報錯 stopiteration

# 和return的區別是

return 會整體退出,不在執行之後的**

列表取值佔記憶體,生成器只有在取用的時候才會生成這個元素載入到記憶體裡

import time    # 匯入模組

deff

(con, n)

: count =

0while

true

:if count < n:

yield con # 生成器函式

count +=

1else

:break

man = f(

"原擎, 加油加油",10

)# 取值

for i in man:

# 迴圈取值

print

(i) time.sleep(1)

# 時間間隔

# a = [i for i in range(10)]

# print(a)

b =[

[j for j in

range(10

)]for i in

range(10

)]print

(b)

Python基礎 迭代器

可以直接作用於for迴圈的資料型別有一下幾種 一類是集合資料型別 如list tuple dict set str等 一類是generator,包括生成器和帶yield的generator function 這些可以直接作用與for迴圈的物件統稱為可迭代物件 iterable 可以使用isinsta...

python基礎 迭代器

我們已經知道,可以直接作用於for迴圈的資料型別有以下幾種 一類是集合資料型別,如list tuple dict set str等 一類是generator,包括生成器和帶yield的generator function。這些可以直接作用於for迴圈的物件統稱為可迭代物件 iterable。可以使用...

python基礎 迭代器

1.什麼是迭代器 2.為什麼要有迭代器?對於序列型別 字串 列表 元組,我們可以使用索引的方式迭代取出其包含的元素。但對於字典 集合 檔案等型別是沒有索引的,若還想取出其內部包含的元素,則必須找出一種不依賴於索引的迭代方式,這就是迭代器.3.什麼是可迭代物件?可迭代物件指的是內建有 iter 方法物...