函式和常用模組 day05 迭代器(六)

2022-09-15 11:03:15 字數 4752 閱讀 4886

2、可迭代物件

3、迭代器

4、rang方法

5、總結

我們經常使用for迴圈去遍歷一些序列資料,但是我們有的時間發現for迴圈的效率很低,而且很占用了大量的硬體資源,但是有的for迴圈遍歷效率很高,而且很節省硬體資源,這是為什麼呢?有人說是生成器的原因。

可迭代物件(iterable):直接用於for迴圈遍歷資料的物件12

3456

78910

11>>>fromcollectionsimportiterable

>>>isinstance(,iterable)#列表

true

>>>isinstance((),iterable)#元組

true

>>>isinstance({},iterable)#字典

true

>>>isinstance('abc',iterable)#字串

true

>>>isinstance(100,iterable)#整型

false

注:生成器不但可以作用於for迴圈,還可以被__next__()函式不斷呼叫,並且返回下乙個值,直到最後丟擲stopiteration錯誤表示無法繼續返回下乙個值而丟擲的異常。

迭代器(iterator123

4567

89>>>fromcollectionsimportiterator

>>>isinstance((i*2foriinrange(5)),iterator)#生成器

true

>>>isinstance(,iterator)#列表

false

>>>isinstance({},iterator)#字典

false

>>>isinstance('abc',iterator)#字串

false

通過上面的例子可以看出,生成器都是iterator物件,但是list、dict、str雖然是iterable物件,卻不是iterator物件。

功能:把list、dict、str等iterable物件變成iterator物件。12

345>>>fromcollectionsimportiterator

>>>isinstance(iter(),iterator)

true

>>>isinstance(iter({}),iterator)

true

這是因為python的iterator物件表示的是乙個資料流,iterator物件可以被__next__()函式呼叫並不斷返回下乙個資料,直到沒有資料時丟擲stopiteration錯誤。可以把這個資料流看做是乙個有序序列,但我們卻不能提前知道序列的長度,只能不斷通過__next__()函式實現按需計算下乙個資料,所以iterator的計算是惰性的,只有在需要返回下乙個資料時才會計算。

注:iterator甚至可以表示乙個無限大的資料流,例如:全體自然數。而使用list是永遠不可能儲存全體自然數的。

在python2.7和python3的range()方法實現的原理是不一樣的,下面我們就來用**看看,**如下:12

3456

>>>range(5)#python2.7

[0,1,2,3,4]

>>>xrange(5)#python2.7

xrange(5)

>>>range(5)#python3.5

range(0,5)

從上面的**可以看出,在python2.7中rang()只是乙個list,在python3中是乙個迭代器,python2.7中xrange()跟python3中的range()功能是一樣的。

python3中的range()方法實現的原理如下:12

forxinrange(5):

pass

實際相當於:12

3456

78910

# 首先獲得iterator物件:

it=iter([1,2,3,4,5])

# 迴圈:

whiletrue:

try:

# 獲得下乙個值:

x=next(it)

exceptstopiteration:

# 遇到stopiteration就退出迴圈

break

凡是可以作用於for迴圈的物件都是iterable型別。

凡是作用於__next__()函式的物件都是iterator型別,它們表示乙個惰性計算的序列。

集合資料型別,例如:list、dict、str等,是iterable但是不是iterator

集合資料型別可以通過iter()函式獲得乙個iterator物件。

Day05 條件和迴圈語句

and的優先順序比or的優先順序高 2.即小括號 優先順序最高 if 條件表示式 冒號不能漏 塊 elif 條件表示式 塊 else 在上述所有的if和elif的條件表示式都為false時無論如何都執行 塊 表示式判斷順序為 從上往下,其中只會有乙個 塊執行。如果if後條件表示式返回的值為true,...

Day05 運算子和if, while,for語句

分別表示加減乘除,取餘取整和求冪 9 2 結果是 5,向下取整 and,or,notis,not is 比較的是變數值在記憶體中的位址in,not inif stmt if expression suite elif expression suite else suite 使用方法1 if 條件 使...

day05 函式引數以及返回值

補充 在計算小數時,要計算精準則要這樣做。alert 0.1 10 0.2 10 10 一 函式的引數 通過不同的引數的傳遞,得到不一樣的結果,使函式功能多樣化 1.形參 在函式定義的時候接受的引數叫形參。形參就是乙個變數。在函式呼叫時,傳遞了實參,相當於給形參賦值。如果沒有傳遞實參,形參是乙個un...