1. 程式人生 > >python學習筆記(三)--python高階特性

python學習筆記(三)--python高階特性

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()判斷一個物件是否可迭代:from
collections import Iterableisinstance('aaa', Iterable)如何對list實現下標迴圈?Python內建的enumerate函式可以把一個list變成索引-元素對。for i, value in enumerate(['A', 'B', 'C']):

3、列表生成式:

列表生成式(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)]
寫列表生成式時,把要生成的元素x * x放到前面,後面跟for迴圈,就可以把list創建出來使用:列出當前目錄下的所有檔案和目錄名import os[d for d in os.listdir('.')]

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迴圈迭代。
for n in g:(2)、把函式中print(x)轉換為 yield(x)yield是中斷,函式中有yield就不再是普通函式,而是generator。for迴圈呼叫generator時,發現拿不到generator的return語句的返回值。如果想要拿到返回值,必須捕獲StopIteration錯誤,返回值包含在StopIterationvalue

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物件,但listdictstr雖然是Iterable,卻不是Iterator原因:迭代器物件表示的是一個數據流,迭代器函式可以被next()呼叫並不斷返回下一個資料,直到沒有資料時丟擲StopIteration錯誤。可以把這個資料流看做是一個有序序列,但我們卻不能提前知道序列的長度,只能不斷通過next()函式實現按需計算下一個資料,所以Iterator的計算是惰性的,只有在需要返回下一個資料時它才會計算。凡是可作用於for迴圈的物件都是Iterable型別;凡是可作用於next()函式的物件都是Iterator型別,它們表示一個惰性計算的序列;集合資料型別如listdictstr等是Iterable但不是Iterator,不過可以通過iter()函式獲得一個Iterator物件。Python的for迴圈本質上就是通過不斷呼叫next()函式實現的。