2.2節講過,Python中有字符串類型。在Python中,字符串用'或"括起,例如'abc'、"qwerty"等都是字符串。注意'和"並非字符串的內容。python
電腦能夠存儲數字,那字符怎麼辦?答案是能夠給字符編碼,這樣只要存儲數字,顯示時轉成字符就能夠了。因爲電腦是美國人發明的,所以電腦最初只有128個(不是很肯定)字符被編碼,叫作ASCII碼,範圍爲0~127。例如字母A的ASCII碼爲65,字母d的ASCII碼爲100。函數
一個8位無符號整數的存儲範圍是0~255,所以存儲ASCII字符只須要一個字節。this
此外,還有擴展的ASCII編碼,範圍爲0~255。前128個字符是同樣的,後128個則是例如â、é這樣的帶有注音符號的字符。這裏不詳細介紹。編碼
由於世界上不只有英語,還有其它語言,其它語言中又有更多的字符。所以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
字符串裏不只能包含普通字符,還能夠包含特殊字符。這些特殊字符就須要經過特殊方法表示出來,這種字符叫作轉義字符。在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.
至於既有'又有"的字符串就只能用轉義序列或者(下文即將講到的)原始字符串了。
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.
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]獲取字符串string的index位置上的字符(注意返回的是一個長度爲1的str)。
10. 將兩個字符串常量寫在一塊兒能夠拼接。
11. 字符串能夠用+運算符進行拼接。
12. string*num表示將string字符串重複num次。