字符串,在幾乎所有Python程序中都有字符串,它的主要用途就是表示一段文本,比如著名的感嘆句“Hello,world!”.
>>>"Hello,world!"
'Hello,world!'
>>>'Hello,world!'
'Hello,world!'
上面兩個(gè)實(shí)例中,第一個(gè)使用雙引號(hào)將字符串括起,第二個(gè)使用單引號(hào)將字符串括起,兩者沒(méi)有任何差別。但為什么又要同時(shí)支持呢?看下面這三個(gè)實(shí)例:
>>>"Let's go!"
"Let's go!"
>>> 'Let's go!'
SyntaxError: invalid syntax
>>>'"Hello,world!" she said'
'"Hello,world!" she said'
上面第一個(gè)實(shí)例中,字符串內(nèi)包含了單引號(hào),因此不能再用單引號(hào)來(lái)括字符串,在這里字符串是‘Let’,Python解釋器不知道該如何處理s后面的字符,如果還是跟第二個(gè)實(shí)例那樣使用單引號(hào)括起整個(gè)字符串,Python解釋器會(huì)報(bào)錯(cuò)。第三個(gè)實(shí)例,字符串內(nèi)包含了雙引號(hào),因此必須使用單引號(hào)括起全部字符串。
如果一定要用單引號(hào)來(lái)括整個(gè)字符串,可以用反斜杠 對(duì)引號(hào)進(jìn)行轉(zhuǎn)義:
>>> 'Let's go!'
"Let's go!"
這樣Python解釋器就知道中間的單引號(hào)也是字符串的一部分,同樣,雙引號(hào)也可以用同樣的方法處理:
>>> ""hello,world!" she said"
'"hello,world!" she said'
>>> "Let's go" '"hello,world!"'
'Let's go"hello,world!"'
連續(xù)輸入兩個(gè)字符串,Python解釋器會(huì)自動(dòng)把它們拼接起來(lái),合并為一個(gè)字符串。這種拼接字符串的方式并非常用。正常拼接將兩段相加就可以了
>>> "Hello," + "world!"
'Hello,world!'
>>> x = "hello,"
>>> y = "world!"
>>> x+y
'hello,world!'
>>> "Hello,world!"
'Hello,world!'
>>> print("Hello,world!")
Hello,world!
第一個(gè)實(shí)例是用引號(hào)括起的,Python解釋器在打印時(shí),保留了在代碼中的樣子,所以使用print()所打印出的結(jié)果,才是真正展現(xiàn)給用戶的效果。
兩種不同的方式將值轉(zhuǎn)換成字符串,可以通過(guò)使用str()和repr() 函數(shù)直接使用這兩種方式,通過(guò)下面兩個(gè)實(shí)例觀察兩者的不同:
>>> print(repr("Hello,world!"))
'Hello,world!'
>>> print(str("Hello,world!"))
Hello,
world!
1、長(zhǎng)字符串
要表示跨越多行的字符串,可以使用三引號(hào)''' ... '''或三個(gè)雙引號(hào)""" ... """,這讓Python解釋器能夠識(shí)別表示字符串開(kāi)始和結(jié)束的位置,字符串本身包含的單引號(hào)和雙引號(hào),不用使用反斜杠進(jìn)行轉(zhuǎn)義。
>>> print('''This is a very long string.
It continues here.
And it's not over yet.
Still here''')
This is a very long string.
It continues here.
And it's not over yet.
Still here
>>> print("""This is a very long string.
It continues here.
And it's not over yet.
Still here""")
This is a very long string.
It continues here.
And it's not over yet.
Still here
除長(zhǎng)字符串外,常規(guī)的短字符串也可以跨行,在行尾加反斜杠即可,這種處理方式也適用于表達(dá)式和語(yǔ)句。
>>> print("hello,
world!")
hello, world!
>>> 1+2+
4+5
12
('hello,world')
hello,world
2、原始字符串
在原始字符串中不會(huì)對(duì)反斜杠進(jìn)行處理,效果跟repr()函數(shù)類似,在常規(guī)字符串中,使用反斜杠可以讓字符串包含原本無(wú)法的字符,比如上面已經(jīng)出現(xiàn)的一個(gè)實(shí)例:
>>> print('Hello,world')
Hello,
world
通常情況下是可以的,但是在有些特殊情況,就不行了,比如字符串中包含了路徑C:owfile
>>> print('C:ewfile')
C:
ewfile
>>> print('C:\newfile')
C:ewfile
通常使用反斜杠 對(duì)反斜杠進(jìn)行轉(zhuǎn)義就行,但如果是一個(gè)很長(zhǎng)的路徑就需要大量的反斜杠,這種情況下,就可以使用原始字符進(jìn)行處理,讓字符串的每個(gè)字符保持原樣。
>>> print(r'C:ewfile')
C:ewfile
>>> print(r'C:Program Filesilereeoo')
C:Program Filesilereeoo
通過(guò)上面?zhèn)z實(shí)例能看出來(lái),原始字符串用r''表示' '這對(duì)單引號(hào)內(nèi)的字符串,不進(jìn)行轉(zhuǎn)義。
>>> print(r'Let's go')
Let's go
還有需要注意的是原始字符串不能以反斜杠結(jié)尾,因?yàn)镻ython解釋器無(wú)法判斷字符串是否到此結(jié)束
>>> print(r'This is illegal')
SyntaxError: EOL while scanning string literal
但如果最后一個(gè)字符必須是反斜杠,這可以這樣處理:
>>> print(r'C:Program Filesooar' '\')
C:Program Filesooar
字符串這節(jié)太枯燥了,大體理解的差不多了,關(guān)于字符編碼,先不看了。
后面要是能用到再補(bǔ)上。
參考書(shū)籍《Python基礎(chǔ)教程(第三版)》
聯(lián)系客服