python學習筆記(三)--python高階特性
阿新 • • 發佈:2019-01-09
python的高階特性有切片、迭代、列表生成式、生成器、迭代器等,下面來介紹這幾種高階特性:
1、切片:
切片特別簡單,用中括號表示範圍,包前不包後。就是中括號裡邊的範圍前面的數值被包括在內,後面的數值不被包括在內。
L = ['a','b','c','d']L[0:3] 索引從0開始取到3,不包括3.索引從0開始,0可以省略 L[:3]L[1:3] 索引從1開始取到3,不包括3.L[-2:] 倒數第二個元素到最後。L[:] 整個listtuple、字串也可以做切片。2、迭代:
迭代通過for ... in 完成。
給定一個list或者tuple,用for迴圈遍歷,稱為迭代。dict迭代:for key in d / for value in d.values / for k,v in d.items()判斷一個物件是否可迭代:from3、列表生成式:
列表生成式(List Comprehensions):建立列表。Python內建的非常簡單卻強大的可以用來建立list的生成式。生成list[1,2,3,4,5,6,7,8,9,10] -> list[range(1,11)]生成list[1*1,2*2,3*3,...,10*10] -> [x*x for x in range(1,11)]4、生成器:
通過列表生成式建立列表的方法受到記憶體限制,列表容量有限。且佔用儲存空間大,浪費空間。生成器(generator):一邊迴圈,一邊計算的機制。建立generator方法:(1)、把生成式[ ]轉換為( )L = [x * x for x in range(10)] g = (x * x for x in range(10))獲取generator元素 next(g)generator儲存的是演算法,每次呼叫next(g),就計算出g的下一個元素的值,直到計算到最後一個元素,沒有更多的元素時,丟擲StopIteration的錯誤。next(g)使用麻煩,可以用for迴圈迭代。5、迭代器:
可以直接作用於for迴圈的資料型別:1、list、tuple、dict、set、str2、generator,包括生成器和帶yield的generator function可以直接作用於for迴圈的物件統稱為可迭代物件:Iterable.判斷一個物件是否為可迭代物件:isinstance()from collections import Iterableisinstance([], Iterable)isinstance({}, Iterable)isinstance('aaa', Iterable)isinstance((x for x in range(10)), Iterable)迭代器(iterator):可以被next()函式呼叫,並不斷返回下一個值的物件。生成器都是Iterator物件,但list、dict、str雖然是Iterable,卻不是Iterator。原因:迭代器物件表示的是一個數據流,迭代器函式可以被next()呼叫並不斷返回下一個資料,直到沒有資料時丟擲StopIteration錯誤。可以把這個資料流看做是一個有序序列,但我們卻不能提前知道序列的長度,只能不斷通過next()函式實現按需計算下一個資料,所以Iterator的計算是惰性的,只有在需要返回下一個資料時它才會計算。凡是可作用於for迴圈的物件都是Iterable型別;凡是可作用於next()函式的物件都是Iterator型別,它們表示一個惰性計算的序列;集合資料型別如list、dict、str等是Iterable但不是Iterator,不過可以通過iter()函式獲得一個Iterator物件。Python的for迴圈本質上就是通過不斷呼叫next()函式實現的。