Python教程(2.4)——字符串

2.2節講過,Python中有字符串類型。在Python中,字符串用'或"括起,例如'abc'、"qwerty"等都是字符串。注意'和"並非字符串的內容。python

 

ASCII(American Standard Code for Information Interchange)碼

 

電腦能夠存儲數字,那字符怎麼辦?答案是能夠給字符編碼,這樣只要存儲數字,顯示時轉成字符就能夠了。因爲電腦是美國人發明的,所以電腦最初只有128個(不是很肯定)字符被編碼,叫作ASCII碼,範圍爲0~127。例如字母A的ASCII碼爲65,字母d的ASCII碼爲100。函數

 

一個8位無符號整數的存儲範圍是0~255,所以存儲ASCII字符只須要一個字節。this

 

此外,還有擴展的ASCII編碼,範圍爲0~255。前128個字符是同樣的,後128個則是例如â、é這樣的帶有注音符號的字符。這裏不詳細介紹。編碼

 

Unicode

 

由於世界上不只有英語,還有其它語言,其它語言中又有更多的字符。所以ASCII碼不能知足要求,須要一個新的字符集——Unicode。Unicode包含了世界上大多數語言的字符。例如中文的「我」字,Unicode碼爲25105,「文」字是25991。對於一個ASCII字符,其Unicode編碼與ASCII編碼是同樣的。Unicode的0~128範圍就是ASCII字符。spa

 

通常字符須要2個字節進行存儲,很偏僻的就須要4個字節。code

 

字符串和字符串常量

 

根據字符的概念,字符串能夠被從新定義成若干字符的組合。Python中的字符串類型爲str,採用Unicode編碼。所以裏面可使用Unicode字符(例如中文)。Python中沒有單獨的字符類型。orm

 

字符串常量就是指像"python"、'globe'這些不變的字符串,與變量相對。blog

 

轉義字符/序列(escape character/sequence)

 

字符串裏不只能包含普通字符,還能夠包含特殊字符。這些特殊字符就須要經過特殊方法表示出來,這種字符叫作轉義字符。在Python中,轉義字符以\開頭。由於轉義字符在代碼中須要用兩個字符表示,也叫作轉義序列索引

 

在字符串中,你可能想換行,這時就可使用\n轉義字符;你可能想要tab,這時你能夠直接打tab或使用\t轉義字符(推薦後者)。字符串

 

例如:

 

>>> print('first line\nsecond line\nthird line')
first line
second line
third line

 

與下面:

 

print('first line')
print('second line')
print('third line')

 

或下面:

 

>>> print('first line')
first line
>>> print('second line')
second line
>>> print('third line')
third line

 

是相同的。

 

對於\t也是同樣的:

 

>>> print('1\t2\t3\t4\tend')
1    2    3    4    end

 

還有一些容易形成歧義的字符,例如'、"和\('和"會被覺得成字符串的開始或結束,\會認爲是轉義符號),也須要使用轉義序列\'、\"和\\才能輸出:

 

>>> print('You must use \\\', \\\" and \\\\ to display \', \" and \\.')
You must use \', \" and \\ to display ', " and \.

 

固然,對於只含有'的字符串,能夠用"括起;對於只含有"的字符串,能夠用'括起。例如:

 

>>> print('"All right", he says.')
"All right", he says.
>>> print("I'm OK.")
I'm OK.

 

至於既有'又有"的字符串就只能用轉義序列或者(下文即將講到的)原始字符串了。

 

原始字符串(raw string)

 

Python支持原始字符串。這種字符串內的字符都是原始的,沒有轉義。轉義字符串用r' '括起,例如:

 

>>> r'this \n does not mean newline'
'this \\n does not mean newline'

 

不過注意,Python在不用print()顯示字符串時,是會加上轉義符號\的。

 

多行字符串

 

有時候,字符串裏有不少換行符不夠方便,這時可使用多行字符串。多行字符串用''' '''或""" """(每邊3個'或3個")括起,裏面的enter被看做換行符。例如:

 

>>> print('''first line
... second line
... third line''')
first line
second line
third line

 

注意輸入多行字符串時,在字符串結束以前,命令提示符也會變成...。

 

在多行字符串一行結尾加\能夠防止換行:

 

>>> print('''\
... first line
... second line
... third line\
... ''')
first line
second line
third line

 

還能夠用r'''...'''和r"""..."""表示原始多行字符串,請本身嘗試。

 

字符串操做

 

計算長度

 

使用len()函數計算字符串長度。例如:

 

>>> len('GoldenGlobalView')
16
>>> s = 'internationalization'
>>> len(s)
20
>>> len('Unicode字符串')
10

 

獲取字符串中的某個字符

 

使用string[index]能夠獲取字符串string索引(index,也叫下標、位置)爲index的字符:

 

>>> s = 'Python Tutorial'
>>> s[0]
'P'
>>> s[5]
'n'
>>> s[12]
'i'

 

注意索引從0開始,0索引對應第一個字符,1對應第二個,2對應第三個,等等。

 

若是索引太大,就會出現錯誤:

 

>>> s[100]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: string index out of range

 

與C/C++不一樣,索引也能夠是負數:

 

>>> s[-1]
'l'
>>> s[-4]
'r'
>>> s[-10]
'n'

 

-1的索引表示最後一個字符,-2表示倒數第二個,-3表示倒數第三個,以此類推。

 

索引過小也不行:

 

>>> s[-100]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: string index out of range

 

注意雖然這樣能夠獲取字符串中的某個字符,可是獲取的仍然是字符串類型,只是長度爲1。Python沒有單獨的字符類型。

 

拼接字符串常量

 

兩個或多個字符串常量能夠直接寫在一塊兒,進行拼接(concatenation):

 

>>> 'class''mate'
'classmate'
>>> "pyt""hon"
'python'
>>> 'note'"book"
'notebook'
>>> 'un''believ''able'
'unbelievable'

 

注意兩個字符串能夠一個用'括起,一個用"括起。通常將這種技巧用於長字符串:

 

>>> print('We often cut a long string '
... 'into several lines.')
We often cut a long string into several lines.

 

拼接字符串

 

若是是一個類型爲str的變量和一個字符串常量,就不能直接寫在一塊兒進行拼接了:

 

>>> s = 'class'
>>> s 'mate'
  File "<stdin>", line 1
    s 'mate'
           ^
SyntaxError: invalid syntax

 

這時須要用+運算符:

 

>>> s = 'class'
>>> s + 'mate'
'classmate'

 

+運算符也能夠用於兩個str變量之間:

 

>>> s1 = 'class'
>>> s2 = 'mate'
>>> s1 + s2
'classmate'

 

字符串乘整數

 

在Python中,假設s是一個字符串,n是個整數,則s*n和n*s表示將s重複n次。

 

例如:

 

>>> 'py' * 2
'pypy'
>>> 3 * 'un' + 'known'
'unununknown'

 

n小於等於0時,字符串爲空:

 

>>> 'str' * 0
''
>>> 'egg' * -2
''

 

格式化字符串

 

最後來看一看字符串的格式化

 

有時候咱們須要輸出一個含有不少變量的句子,例如「xx,性別xx,xx歲,職業xx」。對於比較簡單的,能夠直接用print()輸出:

 

>>> print('He is', age, 'years old.')

 

複雜一些的呢?

 

>>> name = 'Mike'
>>> gender = 'male'
>>> age = 25
>>> job = 'programmer'
>>> print(name, ',', gender, ',', age, ', is a(n)', job)
Mike , male , 25 , is a(n) programmer

 

能夠看到,這裏使用print()顯得十分繁瑣,並且由於print()的工做原理,輸出含有多餘的空格。

 

前面說過,能夠經過指定print()的sep參數改變分隔符:

 

>>> print(name, ', ', gender, ', ', age, ', is a(n) ', job, sep='')    # indicate an empty string as separator
Mike, male, 25, is a(n) programmer

 

但這仍是很繁瑣。

 

這時就能夠用格式化字符串使代碼更美觀了。一個簡單的例子以下:

 

>>> print('Hello, %s' % 'world')
Hello, world

 

注意中間部分:

 

'Hello, %s' % 'world'

 

前面是一個字符串,'Hello, %s'。中間的%s是一個佔位符,表示這裏應該有一個字符串(str)。接下來是一個%,表示格式化字符串。後面是一個字符串'world',對應於前面的%s。Python將會分析上面代碼,而後把'world'替換%s,獲得'Hello, world!',傳給print(),最後輸出。

 

更難一點的例子:

 

>>> print('%d - %d = %d' % (10, 6, 10 - 6))
10 - 6 = 4

 

'%d - %d = %d'中有3個佔位符%d,表示整數(int)。%後面的十、六、10-6分別對應於第一個、第二個和第三個%d,Python會將3個%d,按照位置順序,分別替換成十、六、10-6的結果4,因而整個字符串變成'10 - 6 = 4',而後輸出。

 

那麼前面的例子就解決了:

 

>>> print('%s, %s, %d, is a(n) %s' % (name, gender, age, job))
Mike, male, 25, is a(n) programmer.

 

Todo

 

1. 字符串編碼問題

2. 第二提示符

3. 格式化佔位符

 

小結

 

1. 字符集有ASCII字符集和Unicode字符集。

2. Python中的字符串類型爲str

3. Python沒有單獨的字符類型,一個字符就是一個長度爲1的str。

4. 轉義字符以\開頭,常見的有\n、\t、\'、\"、\\。

5. 原始字符串用r'...'或r"..."表示。

6. 多行字符串用'''...'''或"""..."""表示。

7. 原始多行字符串用r'''...'''或r"""..."""表示。

8. 使用len()函數計算字符串長度。

9. 使用string[index]獲取字符串stringindex位置上的字符(注意返回的是一個長度爲1的str)。

10. 將兩個字符串常量寫在一塊兒能夠拼接。

11. 字符串能夠用+運算符進行拼接。

12. string*num表示將string字符串重複num次。

相關文章
相關標籤/搜索