python學習筆記——2

來源:互聯網
上載者:User

標籤:csharp   替換   使用   trace   traceback   win   儲存   utf-8   rac   

Python的字串

在最新的Python 3版本中,字串是以Unicode編碼的,也就是說,Python的字串支援多語言.

對於單個字元的編碼,Python提供了ord()函數擷取字元的整數表示,chr()函數把編碼轉換為對應的字元:

>>> ord(‘A‘)65>>> ord(‘中‘)20013>>> chr(66)‘B‘>>> chr(25991)‘文‘

如果知道字元的整數編碼,還可以用十六進位這麼寫str:

>>> ‘\u4e2d\u6587‘

‘中文‘


Python對bytes類型的資料用帶b首碼的單引號或雙引號表示:

要注意區分‘ABC‘和b‘ABC‘,前者是str,後者雖然內容顯示得和前者一樣,但bytes的每個字元都只佔用一個位元組。

以Unicode表示的str通過encode()方法可以編碼為指定的bytes,例如:

>>> ‘ABC‘.encode(‘ascii‘)b‘ABC‘>>> ‘中文‘.encode(‘utf-8‘)b‘\xe4\xb8\xad\xe6\x96\x87‘>>> ‘中文‘.encode(‘ascii‘)Traceback (most recent call last):  File "<stdin>", line 1, in <module>UnicodeEncodeError: ‘ascii‘ codec can‘t encode characters in position 0-1: ordinal not in range(128)

反過來,如果我們從網路或磁碟上讀取了位元組流,那麼讀到的資料就是bytes。要把bytes變為str,就需要用decode()方法:

>>> b‘ABC‘.decode(‘ascii‘)‘ABC‘>>> b‘\xe4\xb8\xad\xe6\x96\x87‘.decode(‘utf-8‘)‘中文‘

要計算str包含多少個字元,可以用len()函數:

>>> len(‘ABC‘)3>>> len(‘中文‘)2

len()Function Compute的是str的字元數,如果換成bytes,len()函數就計算位元組數:

>>> len(b‘ABC‘)3>>> len(b‘\xe4\xb8\xad\xe6\x96\x87‘)6>>> len(‘中文‘.encode(‘utf-8‘))6

可見,1個中文字元經過UTF-8編碼後通常會佔用3個位元組,而1個英文字元只佔用1個位元組。

在操作字串時,我們經常遇到str和bytes的互相轉換。為了避免亂碼問題,應當始終堅持使用UTF-8編碼對str和bytes進行轉換。

由於Python原始碼也是一個文字檔,所以,當你的原始碼中包含中文的時候,在儲存原始碼時,就需要務必指定儲存為UTF-8編碼。當Python解譯器讀取原始碼時,為了讓它按UTF-8編碼讀取,我們通常在檔案開頭寫上這兩行:

#!/usr/bin/env python3# -*- coding: utf-8 -*-

第一行注釋是為了告訴Linux/OS X系統,這是一個Python可執行程式,Windows系統會忽略這個注釋;

第二行注釋是為了告訴Python解譯器,按照UTF-8編碼讀取原始碼,否則,你在原始碼中寫的中文輸出可能會有亂碼。

申明了UTF-8編碼並不意味著你的.py檔案就是UTF-8編碼的,必須並且要確保文字編輯器正在使用UTF-8 without BOM編碼:

如果.py檔案本身使用UTF-8編碼,並且也申明了# -*- coding: utf-8 -*-,開啟命令提示字元測試就可以正常顯示中文:

EG:

運行效果如下:

 

格式化

最後一個常見的問題是如何輸出格式化的字串。我們經常會輸出類似‘親愛的xxx你好!你xx月的話費是xx,餘額是xx‘之類的字串,而xxx的內容都是根據變數變化的,所以,需要一種簡便的格式化字串的方式。

在Python中,採用的格式化方式和C語言是一致的,用%實現,舉例如下:

>>> ‘Hello, %s‘ % ‘world‘‘Hello, world‘>>> ‘Hi, %s, you have $%d.‘ % (‘Michael‘, 1000000)‘Hi, Michael, you have $1000000.‘

你可能猜到了,%運算子就是用來格式化字串的。在字串內部,%s表示用字串替換,%d表示用整數替換,有幾個%?預留位置,後面就跟幾個變數或者值,順序要對應好。如果只有一個%?,括弧可以省略。

 常見的預留位置有:

%d 整數
%f 浮點數
%s 字串
%x 十六進位整數

 

 

 

  

其中,格式化整數和浮點數還可以指定是否補0和整數與小數的位元:

 >>> ‘%2d-%02d‘ % (3, 1)

‘ 3-01‘>>> ‘%.2f‘ % 3.1415926‘3.14‘

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

 >>> ‘Age: %s. Gender: %s‘ % (25, True)

‘Age: 25. Gender: True‘

 有些時候,字串裡面的%是一個一般字元怎麼辦?這個時候就需要轉義,用%%來表示一個%:

 >>> ‘growth rate: %d %%‘ % 7

‘growth rate: 7 %‘

  

 

python學習筆記——2

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.