流暢的Python第四章總結

2021-10-21 05:55:34 字數 3209 閱讀 2680

字元問題

python3的str物件中獲取的元素是unicode字元。

unicode標準:

碼位:是0~1114111的數字(十進位制),在unicode標準中以4 ~ 6個十六進製制的數字表示,且加字首「u+」。

位元組序列:從位元組序列(非字串行)到碼位的過程是解碼,從碼位到位元組序列的過程是編碼。

>>

> s =

'caf$'

>>

>

len(s)

4>>

> b = s.encode(

'utf8'

)>>

> b

b'caf$'

#bytes型別以b開頭

>>

>

>>

> b.decode(

'utf8'

)'caf$'

位元組概要

python3引入了不可變bytes型別和bytearray型別。兩個型別的物件的各個元素都是位於0 ~ 255的整數。

>>

> cafe =

bytes

('cafè'

,encoding =

'utf_8'

)>>

> cafe

b'caf\xc3\xa8'

>>

> cafe[0]

99>>

> cafe[:1

]

b'c'

>>

> cafe_arr =

bytearray

(cafe)

>>

> cafe_arr

bytearray

(b'caf\xc3\xa8'

)>>

> cafe_arr[-1

:]bytearray

(b'\xa8'

)

只有在str中s[0] == s[:1] 是對的,在其餘的序列中s[0]返回的是乙個元素,s[:1]返回的是乙個只有乙個元素的序列。

二進位制序列會以三種方法顯示:

二進位制序列有個類方法,fromhex()。作用是解析十六進製制數字,構建二進位制序列:

>>

>

bytes

.fromhex(

'314bcea9'

)b'1k\xce\xa9'

使用陣列中的原始資料初始化bytes物件:

>>

>

import array

>>

> nums = array.array(

'h',[-

2,-1

,0,1

,2])

>>

> octets =

bytes

(nums)

>>

> octets

b'\xfe\xff\xff\xff\x00\x00\x01\x00\x02\x00'

處理編碼錯誤

unicodedecodeerror錯誤:

>>

> octets = b'montr\xe9al'

>>

> octets.decode(

'cp1252'

)'montréal'

>>

> octets.decode(

'iso8859_7'

)'montrιal'

>>

> octets.decode(

'koi8_r'

)'montrиal'

>>

> octets.decode(

'utf8'

)traceback (most recent call last)

: file ""

, line 1,in

octets.decode(

'utf8'

)unicodedecodeerror:

'utf-8' codec can't decode byte 0xe9

in position 5

: invalid continuation byte

>>

> octets.decode(

'utf8'

, errors =

'replace'

)'montr�al'

unicodeencodeerror錯誤:

與decodeerror錯誤類似,當無法將乙個字元解碼成二進位制序列時,會報錯,可以使用encode(『cp437』, errors = 『ignore』),encode(『cp437』, errors = 『replace』),encode(『cp437』, errors = 『xmlcharrefreplace』)分別對錯誤進行跳過,替換成『?』和替換成xml實體。

python3預設使用utf-8編碼原始碼,如果開啟包含utf-8之外的資料,會丟擲syntaxerror錯誤,這時可以在頂部新增注釋:

# coding:cp1252

bom位元組序標記

b』\xff\xfe 指明編碼時使用小字節序,小字節序是指各個碼位的最低有效位元組在前面,例如字母』e『的碼位為u+0045(十進位制69),則在位元組偏移的第二位和第三位編碼為69和0,大字節序則為0和69。

utf-16有兩個變種:utf-16le顯式使用小字節序,utf-16be顯式使用大字節序。這兩個不會生成bom。

處理文字檔案

使用read()和write()函式會自動將文字中的位元組序列解碼成字串。

eval()函式,接受乙個字串引數,作用是將這個字串當作python表示式執行,就相當於在python中寫出這個字串然後執行。

規範化unicode字串

unicode有組合字元(字母加符號)如é可以看作e\u0301,因為碼位序列不同,所以python判定這兩個不相等,可以使用unicodedata.normalize將unicode規範化,normalize()函式有兩個引數,第乙個是』nfc『,』nfd『,』nfkc『,』nfkd『四個中的乙個,nfc指明使用最少的碼位構成字串,nfd則是將組合字元分解成基字元和單獨的組合字元,nfkc和nfkd會將字元轉化為相容其他編碼的字元,有時會改變意思,第二個引數即字串。

casefold()函式與lower()函式得到的結果一樣,只有少數的不一樣,可忽略。

第四章總結

1.對貪心演算法的認識 貪心演算法在求解問題時,不從整體上考慮,而是得到某種意義上的區域性最優解,做出當前看來是最好的選擇。每次的選擇都會依賴之前作出的選擇,而對後面的選擇不會產生影響。它具有最優子結構的性質,即問題的最優解包含其子問題的最優解。但貪心演算法不是對於所有的問題都能得到整體最優解,最重...

第四章(筆記總結)

簡單的組合語言源程式基本語法 assume cs code code segment mov ax 0001h add ax ax mov ax 4c00h int 21h code ends end在組合語言源程式中,包含兩種指令分別是,彙編指令和偽指令 彙編指令 1 mov ax 0001h i...

第四章作業總結

include using namespace std int main cout a endl system pause return 0 注意getchar 不能迴圈條件用一次,算式中再用一次,否則算兩次getchar 只能先設個變數再用。將使用者輸入的任意十進位制整數轉換為16進製制數輸出 利...