2、可迭代物件
3、迭代器
4、rang方法
5、總結
我們經常使用for迴圈去遍歷一些序列資料,但是我們有的時間發現for迴圈的效率很低,而且很占用了大量的硬體資源,但是有的for迴圈遍歷效率很高,而且很節省硬體資源,這是為什麼呢?有人說是生成器的原因。
可迭代物件(iterable
):直接用於for迴圈遍歷資料的物件12
3456
78910
11>>>
from
collections
import
iterable
>>>
isinstance
(,iterable)
#列表
true
>>>
isinstance
((),iterable)
#元組
true
>>>
isinstance
({},iterable)
#字典
true
>>>
isinstance
(
'abc'
,iterable)
#字串
true
>>>
isinstance
(
100
,iterable)
#整型
false
注:生成器不但可以作用於for迴圈,還可以被__next__()函式不斷呼叫,並且返回下乙個值,直到最後丟擲stopiteration
錯誤表示無法繼續返回下乙個值而丟擲的異常。
迭代器(iterator
123
4567
89>>>
from
collections
import
iterator
>>>
isinstance
((i
*
2
for
i
in
range
(
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>>>
from
collections
import
iterator
>>>
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
for
x
in
range
(
5
):
pass
實際相當於:12
3456
78910
# 首先獲得iterator物件:
it
=
iter
([
1
,
2
,
3
,
4
,
5
])
# 迴圈:
while
true
:
try
:
# 獲得下乙個值:
x
=
next
(it)
except
stopiteration:
# 遇到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...