python 高階特性

2022-08-24 00:33:08 字數 2308 閱讀 1920

一、切片

l[0:3:1]表示,從索引0開始取,直到索引3為止,但不包括索引3,其中步長為1。即索引012,正好是3個元素

倒數第乙個元素的索引是-1

如果第乙個索引是0,還可以省略

二、迭代

給定乙個list或tuple,我們可以通過for迴圈來遍歷這個list或tuple,這種遍歷我們稱為迭代(iteration)

預設情況下,dict迭代的是key。如果要迭代value,可以用for value in d.values(),如果要同時迭代key和value,可以用for k, v in d.items()

可迭代物件:

1)集合資料型別,如listtupledictsetstr

2)generator,包括生成器和帶yield的generator function

判斷是否可以迭代:isinstance('abc', iterable) # str是否可迭代

三、生成器

生成器:generator:列表元素可以按照某種演算法推算出來,在迴圈的過程中不斷推算出後續的元素,這種一邊迴圈一邊計算的機制,稱為生成器

建立了乙個generator後,基本上永遠不會呼叫next(),而是通過for迴圈來迭代它,並且不需要關心stopiteration的錯誤

如果乙個函式定義中包含yield關鍵字,那麼這個函式就不再是乙個普通函式,而是乙個generator

注意:generator和函式的執行流程不一樣。函式是順序執行,遇到return語句或者最後一行函式語句就返回。而變成generator的函式,在每次呼叫next()的時候執行,遇到yield語句返回,再次執行時從上次返回的yield語句處繼續執行

for迴圈呼叫generator時,發現拿不到generator的return語句的返回值。如果想要拿到返回值,必須捕獲stopiteration錯誤,返回值包含在stopiterationvalue

四、迭代器

可以使用isinstance()判斷乙個物件是否是iterator物件

生成器都是iterator物件,但listdictstr雖然是iterable,卻不是iterator

listdictstriterable變成iterator可以使用iter()函式

五、小結

凡是可作用於for迴圈的物件都是iterable型別(可迭代)

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

集合資料型別如listdictstr等是iterable但不是iterator,不過可以通過iter()函式獲得乙個iterator物件

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

Python高階特性

l csx sarah tracy bob jack print l 0 l 1 l 2 輸出 csx sarah tracy l 0 3 輸出 csx sarah tracy 如果第乙個索引是0,還可以省略 print l 2 輸出 bob jack print l 2 1 輸出 bob d fo...

Python高階特性

python 高階特性 from collections import iterable from collections import iterator 切片 list切片 l list range 100 print l 0 3 取前3個元素 print l 3 取前3個元素 print l 4...

Python高階特性

切片 slice 非常靈活,體現了python的簡便性 1.取乙個list和tuple的部分元素時的簡化操作 l michael sarah tracy bob jack l 0 3 michael sarah tracy 從0開始不包括3,第乙個索引是0可省略,也支援負數按倒數的順序取值,什麼都不...