標籤:過濾 lte 排列 instance 產生 process類 for 對list進行排序 參數
1.切片:截取List,tuple指定範圍內的值:>>L[0,3]
2.如果給定一個list或tuple,我們可以通過for迴圈來遍曆這個list或tuple,這種遍曆我們稱為迭代(Iteration)。 在Python中,迭代是通過for ... in來完成的 for x in L print(x)
3.列表產生式時,就是動態建立列表,把要產生的元素x * x放到前面,後面跟for迴圈,就可以把list建立出來,十分有用,多寫幾次,很快就可以熟悉這種文法。
for迴圈後面還可以加上if判斷,這樣我們就可以篩選出僅偶數的平方:
>>> [x * x for x in range(1, 11) if x % 2 == 0] [4, 16, 36, 64, 100]
還可以使用兩層迴圈,可以產生全排列:
>>> [m + n for m in ‘ABC‘ for n in ‘XYZ‘] [‘AX‘, ‘AY‘, ‘AZ‘, ‘BX‘, ‘BY‘, ‘BZ‘, ‘CX‘, ‘CY‘, ‘CZ‘]
運用列表產生式,可以快速產生list,可以通過一個list推匯出另一個list,而代碼卻十分簡潔。
4。產生器 在Python中,這種一邊迴圈一邊計算的建立list的機制,稱為產生器:generator,節省大量的空間 g=(x * x for x in range(10)] for x in g: print(x)
5.這些可以直接作用於for迴圈的對象統稱為可迭代對象:Iterable。 以被next()函數調用並不斷返回下一個值的對象稱為迭代器:Iterator。 可以使用isinstance()判斷一個對象是否是Iterator對象: 小結 凡是可作用於for迴圈的對象都是Iterable類型;
凡是可作用於next()函數的對象都是Iterator類型,它們表示一個惰性計算的序列;
集合資料類型如list、dict、str等是Iterable但不是Iterator,不過可以通過iter()函數獲得一個Iterator對象。
Python的for迴圈本質上就是通過不斷調用next()函數實現的,例如:
for x in [1, 2, 3, 4, 5]: pass
6. 函數式編程的一個特點就是,允許把函數本身作為參數傳入另一個函數,還允許返回一個函數! 可見,abs(-10)是函數調用,而abs是函數本身。 說明變數f現在已經指向了abs函數本身。直接調用abs()函數和調用變數f()完全相同。
7.編寫高階函數,就是讓函數的參數能夠接收別的函數。map,reduce
8.filter()函數 Python內建的filter()函數用於過濾序列。
9.排序演算法 Python內建的sorted()函數就可以對list進行排序: sorted()也是一個高階函數。用sorted()排序的關鍵在於實現一個映射函數。 >>> sorted([36, 5, -12, 9, -21]) [-21, -12, 5, 9, 36] 要進行反向排序,不必改動key函數,可以傳入第三個參數reverse=True:
>>> sorted([‘bob‘, ‘about‘, ‘Zoo‘, ‘Credit‘], key=str.lower, reverse=True) [‘Zoo‘, ‘Credit‘, ‘bob‘, ‘about‘]
10.閉包 內建函式sum可以引用外部函數lazy_sum的參數和局部變數,當lazy_sum返回函數sum時,相關參數和變數都儲存在返回的函數中,這種稱為“閉包(Closure)”的程式結構擁有極大的威力。 高階函數除了可以接受函數作為參數外,還可以把函數作為結果值返回。
11.匿名函數 關鍵字lambda表示匿名函數,冒號前面的x表示函數參數。 >>> list(map(lambda x: x * x, [1, 2, 3, 4, 5, 6, 7, 8, 9])) [1, 4, 9, 16, 25, 36, 49, 64, 81
12.裝飾器 在函數調用前後自動列印日誌,但又不希望修改now()函數的定義,這種在代碼運行期間動態增加功能的方式,稱之為“裝飾器”(Decorator)。
13. 偏函數 簡單總結functools.partial的作用就是,把一個函數的某些參數給固定住(也就是設定預設值),返回一個新的函數,調用這個新函數會更簡單。
14. 模組 在Python中,一個.py檔案就稱之為一個模組(Module)。為了編寫可維護的代碼,我們把很多函數分組,分別放到不同的檔案裡,為了避免模組名衝突,Python又引入了按目錄來組織模組的方法,稱為包(Package)。 範圍 在一個模組中,我們可能會定義很多函數和變數,但有的函數和變數我們希望給別人使用,有的函數和變數我們希望僅僅在模組內部使用。在Python中,是通過_首碼來實現的。
15 正常的函數和變數名是公開的(public),可以被直接引用,比如:abc,x123,PI等;
類似__xxx__這樣的變數是特殊變數,可以被直接引用,但是有特殊用途,比如上面的__author__,__name__就是特殊變數,hello模組定義的文檔注釋也可以用特殊變數__doc__訪問,我們自己的變數一般不要用這種變數名;
類似_xxx和__xxx這樣的函數或變數就是非公開的(private),不應該被直接引用,比如_abc,__abc等;
之所以我們說,private函數和變數“不應該”被直接引用,而不是“不能”被直接引用,是因為Python並沒有一種方法可以完全限制訪問private函數或變數,但是,從編程習慣上不應該引用private函數或變數。
由於Python是跨平台的,自然也應該提供一個跨平台的多進程支援。multiprocessing模組就是跨平台版本的多進程模組。 multiprocessing模組提供了一個Process類來代表一個進程對象
python 進階知識點