1,迭代器
dict1 =
print
(dir
(dict1)
)
迭代:重複同乙個動作
list1 =[1
,2,3
,4,5
]print
(dir
(list1)
)for i in list1:
print
(i)
index =
0while index <
len(list1)
:print
(list
[index]
) index +=
1
從可迭代物件生成了乙個迭代器
凡是有__iter__方法,是可迭代物件
可迭代物件包含了迭代器
a =
iter
(list1)
print
(a)# 迭代器物件
print
(dir
(a))
for迭代原理:
try
:while
true
:print
(next
(a))
except stopiteration:
pass
可迭代物件__iter__
迭代器物件__iter__next
2,生成器函式
def func1:
yield
1b = func1(
)print
(b)# generator生成器
print
(next
(b))
# 通過next啟用yield的執行
deffunc2()
:yield
1yield
2yield
3yield
4c = func2(
)# 顯式的迭代協議
print
(next
(c))
print
(next
(c))
# 隱式的迭代協議
dor i in c:
print
('for'
)print
(i)def
func3()
:print
('一'
)yield
1print
('二'
)yield
2print
('三'
)yield
3d = func3(
)print
(next
(d))
每次next取值,只啟用一次yield
生成器函式和普通函式的區別和聯絡:
相同點:
1,定義格式相同,都是使用def語句
2,二者都可以有return語句,也可以沒有
3,函式體格式相同
不同點:
1,生成器函式中主要是用yield返回資料,而函式主要使用return返回資料。二者返回值不同,函式可以根據需要返回任何型別,生成器函式執行返回。
2,函式呼叫會執行**,生成器不會,等待next啟用**
斐波那契數列:數列當中每乙個值都等於前面兩個數相加的值
[1,1,2,3,5,7,13,21…]
def
fibo
(n):
i,a b =0,
1,1while i < n:
yield a
a,b = b,a+b
i+=1d = fibo(10)
for i in d:
print
(i)
import time
print
('hello'
)time.sleep(3)
print
('hello2'
)
import datetime
print
(datetime.datetime.now())
from datetime import datetime # 匯入部分模組
print
(datetime.now())
from datetime import datetime as dt #別名
print
(dt.now(
))
import test
test.a(
)print
(test.__name__)
#檔名
if __name__ ==
'__main__'
:print
(__name__)
python基礎 可迭代物件和迭代器和生成器
參考自 參考自 可迭代物件 iterable 可直接作用於for迴圈的物件的統稱,如list tuple dict set str 生成器等。可以用isinstance 判斷乙個物件是否為iterable from collections import iterable isinstance ite...
Python基礎 迭代器和生成器
迭代器用於 直譯器需要迭代物件x時,會自動呼叫iter x 內建的iter函式,有以下功能 檢查物件是否實現了 iter 方法,如果實現了就呼叫它,獲取乙個迭代器。如果沒有實現 iter 方法,但是實現了 getitem 方法,python 會建立乙個迭代器,嘗試按順序 從索引 0 開始 獲取元素。...
Python基礎 迭代器和生成器
一 可迭代物件 在python中,我們已經知道,可以直接作用於for迴圈的資料型別有以下幾種 一類是集合資料型別,如list tuple dict set str等 一類是generator,包括生成器和帶yield的generator function。這些可以直接作用於for迴圈的物件統稱為可迭...