1. 程式人生 > >學習python的日常3

學習python的日常3

結束 進行 返回值 表示 自己 元素 創建 reduce rate

python的一些高級特性:

切片(跟名字一樣,把一個完整的東西選取一部分自己想要的去切下來):通過切片可以快速的去除一些元素,只要確定好索引位置,避免的循環導致的多寫代碼

數組,元組,字符串都可以用切片來獲取元素,[x:y]表示從索引位置x開始索引到y位置,不包括y

[x:]從x開始索引到結束,[:y]從0開始索引到y為止(不包括y),[x:y:z]z表示每z個數獲取一個數。

叠代:python中的叠代是通過for...in來完成的,只要有叠代對象,都可以叠代,dict的存儲不是按照

list的方式順序排列,所以可能會不一樣的結果順序,dict中默認叠代key,用for value in x.values()可以

實現叠代value,用for x,y in d.items()可以同時叠代dict中的key和value,利用collections模塊的iterable類型去判斷,

from collections import Iterable
isinstance(‘abc‘,Iterable)

如果是要對list實現類似java的下表循環,python中enumerate函數可以把list變成索引-元素對

for i,value in enumerate([‘A‘,‘B‘,‘C‘]):
    print(i,value)
...
0 A
1 B
2 C

for循環中是可以同時引用兩個變量的

for(x,y) in ([1,1],[2,3],[3,9]):
    print(x,y)

列表生成式:列表生成式用很簡潔的代碼實現一個列表的創建,按照自己的需求,可以對同一變量進行不同操作來生成list,也可以對兩個變量同時進行操作來生成list,也可以調用方法來生成需求的list(如果原list中的數據類型是不同的,可以加一個額外的判斷條件,if isinstance(x,數據類型)。

[x(運算符)x for x in 叠代對象 if 判斷條件]

[m + n for m in ‘ABC‘ for n in ‘XYZ‘] 

[s.xxxx() for s in L]

生成器:把列表生成改成generator,也可以通過函數實現復雜邏輯的generator,generator的工作原理是在for循環的過程中不斷計算出下一個元素,

並在適當的條件結束for循環。函數改成的generator,遇到return語句或者執行到函數體的最後一行語句,就是結束generator的指令,for循環也隨之結束。

叠代器:能夠 被for循環的對象都是Iterable類型,能夠作用於next()函數的對象都是Iterator()類型,表示一個惰性計算的序列,無法提前知道序列的長度,只能通過next()函數按需計算出下一個數據,只有在需要返回下一個數據時才會進行計算。

函數式編程:

高階函數中,map()函數接收兩個參數,一個函數,一個Iterable,map會作用於序列中的每一個元素,

並把結果作為新的Iterator返回; reduce()函數同樣是接收兩個參數,不同的是reduce利用函數作用於

元素之後,元素處理的結果會作為新的元素繼續參與函數的處理,最後返回一個結果。

filter()函數是一個篩選器,用法和map()類似,不過最後返回結果的時候只有結果為True是才會返回該結果,其余舍棄掉,返回的也是一個Iterator。

sorted()函數是一個用於排序的函數作為一個高階函數,可以接收一個key函數來實現自定義的排序,在keys中排序後,再將相應的value值排序結果展示出來

反向排序可以傳入第三個參數reverse = True。

返回函數:函數可以返回一個計算結果,也可以返回一個函數,返回一個函數時,這個函數並沒有被執行,所以函數中最好不要引用可能變化的變量

匿名函數:lambda x:x*x 其中x是函數的參數,匿名函數的表達式的結果就是他的返回值。

裝飾器:本身是一個高階函數,可以返回函數,然後的話可以增強函數的功能,其中functools.wraps可以使得函數的.__name__屬性不會被替換

 

學習python的日常3