1. 程式人生 > >Python注意事項(續)

Python注意事項(續)

這篇是延續上次做的筆記寫的一點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表示用整數替換,有幾個%?佔位符,後面就跟幾個變數或者值,順序要對應好。如果只有一個%?,括號可以省略。
    QQ圖片20180914142314.png

如果你不太確定應該用什麼,%s永遠起作用,它會把任何資料型別轉換為字串。