Python注意事項(續)
阿新 • • 發佈:2018-12-10
這篇是延續上次做的筆記寫的一點Py基礎學習,這幾天半打半就的學習有點拖時間。加油吧!
字元編碼
在python3版本中,字串是以Unicode編碼的,也就是說Python的字串是支援多語言的
>>> print('中文夾雜English_Strng也是可以的') 中文夾雜English_Strng也是可以的
Python
Copy
單個字元的編碼,Python提供
ord()
函式去字元的十進位制整數表示,chr()
函式把編碼轉換為對應的字串單個字元的編碼,Python提供ord()
函式去字元的十進位制整數表示,chr()
函式把編碼轉換為對應的字串
- Python的字串型別是
str
,在記憶體中以Unicode表示,一個字元對應若干個位元組。如果要在網路上傳輸,或者儲存到磁碟上,就需要把str
變為以位元組為單位的bytes
。 - Python對
bytes
型別的資料用帶b
字首的單引號或雙引號表示,要注意區分'ABC'
和b'ABC'
,前者是str
,後者雖然內容顯示得和前者一樣,但bytes
的每個字元都只佔用一個位元組。 - 以Unicode表示的
str
通過encode()
方法可以編碼為指定的bytes
純英文的str
可以用ASCII編碼為bytes
,內容是一樣的,含有中文的str
可以用UTF-8編碼為bytes
str
無法用ASCII編碼,因為中文編碼的範圍超過了ASCII編碼的範圍,Python會報錯。 - 在bytes中,無法顯示為ASCII字元的位元組,用
\x##
顯示。反過來,如果我們從網路或磁碟上讀取了位元組流,那麼讀到的資料就是bytes
。要把bytes
變為str
,就需要用decode()
方法:
>>> b'ABC'.decode('ascii') 'ABC' >>> b'\xe4\xb8\xad\xe6\x96\x87'.decode('utf-8') '中文'
Python
Copy
- 如果bytes中包含無法解碼的位元組,decode()方法會報錯:
>>> b'\xe4\xb8\xad\xff'.decode('utf-8') Traceback (most recent call last): ... UnicodeDecodeError: 'utf-8' codec can't decode byte 0xff in position 3: invalid start byte
Python
Copy
- 如果bytes中只有一小部分無效的位元組,可以傳入errors='ignore'忽略錯誤的位元組:
>>> b'\xe4\xb8\xad\xff'.decode('utf-8', errors='ignore') '中'
Python
Copy
len()
可以計算位元組數
由於Python原始碼也是一個文字檔案,所以,當你的原始碼中包含中文的時候,在儲存原始碼時,就需要務必指定儲存為UTF-8編碼。當Python直譯器讀取原始碼時,為了讓它按UTF-8編碼讀取,我們通常在檔案開頭寫上這兩行:
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
Python
Copy
第一行註釋是為了告訴Linux/OS X系統,這是一個Python可執行程式,Windows系統會忽略這個註釋;
第二行註釋是為了告訴Python直譯器,按照UTF-8編碼讀取原始碼,否則,你在原始碼中寫的中文輸出可能會有亂碼。
申明瞭UTF-8編碼並不意味著你的.py檔案就是UTF-8編碼的,必須並且要確保文字編輯器正在使用UTF-8 without BOM編碼
格式化
在Python中,採用的格式化方式和C語言是一致的,用%實現,舉例如下:
>>> 'Hello, %s' % 'world' 'Hello, world' >>> 'Hi, %s, you have $%d.' % ('Michael', 1000000) 'Hi, Michael, you have $1000000.'
Python
Copy
%
運算子就是用來格式化字串的。在字串內部,%s
表示用字串替換,%d
表示用整數替換,有幾個%?
佔位符,後面就跟幾個變數或者值,順序要對應好。如果只有一個%?
,括號可以省略。
如果你不太確定應該用什麼,%s
永遠起作用,它會把任何資料型別轉換為字串。