2013年4月22日 星期一

Python字串

引號

python的字串可以用雙引號,也可以用單引號,這使得在字串看起來變得比較直覺,也比較美觀,不會看到一堆跳脫符號(\)。
看例子先:
>>> s = 'Say "Hello".'
>>> s
'Say "Hello".'

>>> s = "I'm fine"
>>> s
"I'm fine"

以上也可以用這種方式撰寫:
>>> s = "Say \"Hello\"."
>>> s
'Say "Hello".'

>>> s = 'I\'m fine'
>>> s
"I'm fine"

也就是說,如果字串中有引號與最外側的引號相同,則必須使用跳脫符號,才不會被誤認為字串結束.

另外,python在顯示字串時,也會很聰明的視資料而使用單引號或雙引號,但是......
如果字串中有單引號也有雙引號呢?
>>> s = 'I\'m "fine"'
>>> s
'I\'m "fine"'

python會在最外層用單引號,然後資料中相同的引號使用跳脫符號。

跳脫符號

跳脫字元有下列幾個:
\\ = 反斜線
\' = 單引號
\" = 雙引號
\a = 鈴聲
\b = 倒退
\f = 換頁
\n = 換列
\r = 返回
\t = 水平跳格
\v = 垂直跳格
\N{id} = Unicode資料庫ID
\uhhhh = Unicode 16位元之十六進位值
\Uhhhh = Unicode 32位元之十六進位值
\xhh = 十六進位值
\ooo = 八進位值
\0 = null (是null字元,python不像C用null字元來判斷字串結束)

在互動回應會跳脫字元,但在使用print 敘述則會被解讀。(print在3.X被改為函式)
例如:
>>> s = 'a\nb\tc'
>>> s
'a\nb\tc'
>>> print s
a
b       c

 跳脫符號(\)另有一個使用方式,就是一列程式太長而折成2列撰寫時,在後面加一個反斜線,就能接續到下一列繼續撰寫
>>> a = 1 + 2 + 3 +\
...     4 + 5
>>>
>>> a
15
>>>
注意到了嗎? 第2列開頭是"...",而不是">>>"

原始字串

在某些狀況下,我們並不希望使用跳脫機制,像是檔案路徑如: "c:\a\b\text.txt",在跳脫機制下必須寫成這樣:
>>> path = "c:\\a\\b\\text.txt"
>>> path
'c:\\a\\b\\text.txt'
>>>
>>> print path
c:\a\b\text.txt
>>>
 若是把跳脫機制關掉,字串看起來會比較直覺。
使用的方式,就是在字串的前面加一個 "r"
>>> path = r"c:\a\b\text.txt"
>>> path
'c:\\a\\b\\text.txt'
>>>
>>> print path
c:\a\b\text.txt
>>>

三重引號

有時為了字串的美觀,希望一個字串能分多列撰寫,同時希望字串與輸入的格式一致,就可以使用一種叫區塊文字的方式,使用的方式是以3個單引號或雙申號開頭,最後用同樣的3個引號結尾。
例如:
>>> s = """
... How are you?
... Fine, thank you.
... """
>>> s
'\nHow are you?\nFine, thank you.\n'
>>>
>>> print s

How are you?
Fine, thank you.

三重引號字串通常使用在說明文件字串。

Unicode 字串

python可以指字字串為Unicode,用法是在字串前加一個"u"。
例如:
>>> s = u"abc"
>>> s
u'abc'
>>>
在3.X版本中,字串預設就是Unicode,而新增一個bytes型態。

字串運算

字串串接:
要串接多個字串,有2種方式:
第一種方式: 直接將要串接的字串放在一起:
>>> s = "This " "is " "a " "book."
>>> s
'This is a book.'

第二種方式: 使用加號"+",使用這種方式會比較直觀一些。
>>> s = "This "+"is "+"a "+"book."
>>> s
'This is a book.'

字串重複:
使用乘號"*"可以重複多次相同字串,例如:
>>> s = "Hello" * 5
>>> s
'HelloHelloHelloHelloHello'

如果我們需要一個50字元的分隔符號,就可以輕鬆的產生字串:
>>> s = "-" * 50
>>> s
'--------------------------------------------------'

索引

python字串,可以從左邊索引,或是從右邊索引。若是從左邊索引則從0,1, 2...,反之若從右邊索引,則為-1, -2...
當索引值超過範圍會產生 IndexError。


 字串值
H
E
L
L
O
由左至右索引
0
1
2
3
4
由右至左索引
-5
-4
-3
-2
-1

切片

若要取得字串的片段,可以使用切片的方式,使用方式在字串名稱後加中括號。
使用方式:
字串名稱[起始:結束:步進值]

將字串從起始開始抓取,不包含結束值,每抓取一次步進一次。
起始、結束、步進值都可以省略。
若起始值省略,代表從0開始
若結束值省略,代表到字串結束
若步進值省略,代表1

例如:
>>> s = "HELLO"
>>> s[1]
'E'
>>> s[1:]
'ELLO'
>>> s[0::2]'HLO'
>>>
>>> s[-3]
'L'
>>> s[-3:]
'LLO'
>>> s[-3::-1]
'LEH'

字串格式

python也有類似C語言的printf格式化字串功能,使用方式也差不多,比較特別的是,若不需要指定整數、小數位數,統統可以用%s取代,使用方式:
字串格式 % (值1,值2...)
 常用的%s, %d, %f跟C差不多,還有其他格式就不介紹了。
>>> s = "%s %s %s" % (123, 456.789, "ABC")
>>> s
'123 456.789 ABC'
>>> s = "%05d %3.2f %s" % (123, 456.789, "ABC")
>>> s
'00123 456.79 ABC'

沒有留言:

張貼留言