1. 程式人生 > >風火程式設計--bytes, memoryview, unicode規範化,運算子包operator,函式式包functools: partial, reduce, itemgetter

風火程式設計--bytes, memoryview, unicode規範化,運算子包operator,函式式包functools: partial, reduce, itemgetter

《流暢的python》讀書筆記(三)

4.2python3的位元組型別
python3的bytes或bytearrary是不可變資料了理性, 它的元素是0-255之間的整數, bytearray物件沒有字面量顯示句法.

bytres的索引取到整數,bytearray的索引取到bytes, bytearray切片取到bytearray物件.

記憶體檢視
import struct
ftm = “3s3sHH”
with open(“path”, “rb”) as f:
mv = memoryview(f.read())
header = mv[:10]
t, h, *o = struct.unpack(ftm, header)
print(t,h, o)
del mv # 釋放引用

表情符使用utf-16編碼

二進位制轉str直接編碼encode

decode(“utf-8”)可以解碼任意編碼格式而不報錯, 但未必都可用,如果無法解碼會返回亂碼,
亂碼的BOM(位元組序標註)包含一些編碼資訊

在encode的時候會報錯.

為確保檔案跨平臺可用, 開啟檔案的時候應制定encoing=“utf-8”

open(“path”, “r”)預設返回TextIOWrapper檔案物件, 通過encoding屬性檢視編碼方式

4.6 unicode規範化

from unicodedata import nomalize
s = nomalize('NFC', str)

5.4 可呼叫物件
內建函式和內建方法是使用C語言實現的

5.5 自定義可呼叫物件的類
實現__call__()的物件可呼叫
callable(obj)判斷obj是否是可呼叫物件

5.7僅限關鍵字引數
形參中出現單獨的,*,代表後面的引數必須使用關鍵字引數.

5.8 獲取關於引數的資訊
內省
app物件會自動獲取檢視函式鎖需要的引數,然後從request中取出來傳遞給檢視函式.
如果request中沒有該引數,會丟擲引數丟失的missing異常.

5.9 函式註解
示例:
定義函式func,
形參a為str,
b為大於0的int, 預設值為1,
返回值為str

def func(a: str, b: 'int>0' =1) -> str:
    return a + str(b)

r= func("is: ", 3)
print(r)

5.10 函數語言程式設計的包
運算子在operator包中,
高階函式在functools包中,
redfuce用來進行累計運算, partial用來固化部分引數|(類似閉包)
累計運算

from functools import reduce
from operator import mul
r = reduce(mul, range(1,6))
print(r)

凍結部分引數

from operator import mul
from functools import partial
my_mul = partial(mul, 3)
r = my_mul(5)
print(r)

取元素的元素
itermgetter替代lambda

from operator import itemgetter
li = [(3,3),(1,1), (2,2)]
r = sorted(li, key=itemgetter(1))
print(r)

函式的內省使用six庫