在《 詳解Python拼接字符串的七種方式 》這篇文章里,我提到過(guò),字符串是程序員離不開(kāi)的事情。后來(lái),我看到了一個(gè)英文版本的說(shuō)法:
There are few guarantees in life: death, taxes, and programmers needing to deal with strings.
它竟然把程序員處理字符串跟死亡大事并列了,可見(jiàn)這是多么命中注定……
回頭看其它文章,我發(fā)現(xiàn)這種說(shuō)法得到了佐證,因?yàn)槲以跓o(wú)意中已零零碎碎地提及了字符串的很多方面,例如:字符串讀寫(xiě)文件、字符串打印、字符串不可變性、字符串Intern機(jī)制、字符串拼接、 是否會(huì)取消字符串 ,等等。而這些,還只能算字符串面目的冰山一角。
既然如此,那干脆再單獨(dú)寫(xiě)寫(xiě)Python的字符串吧。這篇內(nèi)容可能會(huì)很基(li)礎(chǔ)(lun),并不是什么“騷操作”或“冷知識(shí)”,權(quán)當(dāng)是一份溫故而求知新的筆記。
1 Python字符串是什么?
根據(jù)維基百科定義:字符串是由零個(gè)或多個(gè)字符組成的有限序列。而在Python 3中,它有著更明確的意思: 字符串是由Unicode碼點(diǎn)組成的不可變序列 (Strings are immutable sequences of Unicode code points.)
字符串是一種序列,這意味著它具備序列類(lèi)型都支持的操作:
# 以下的s、t皆表示序列,x表示元素x in s # 若s包含x,返回True,否則返回Falsex not in s # 若s包含x,返回False,否則返回Trues + t # 連接兩個(gè)序列s * n # s復(fù)制n次s[i] # s的索引第i項(xiàng)s[i:j] # s切片從第i項(xiàng)到第j-1項(xiàng)s[i:j:k] # s切片從第i項(xiàng)到第j-1項(xiàng),間隔為klen(s) # s的長(zhǎng)度min(s) # s的最小元素max(s) # s的最大元素s.index(x) # x的索引位置s.count(x) # s中出現(xiàn)x的總次數(shù)
字符串序列還具備一些特有的操作,限于篇幅,按下不表。預(yù)告一下,下一篇《 你真的知道Python的字符串怎么用嗎? 》將會(huì)展開(kāi)介紹,敬請(qǐng)期待……
字符串序列是一種不可變序列,這意味著它不能像可變序列一樣,進(jìn)行就地修改。例如,在字符串“Python”的基礎(chǔ)上拼接“Cat”,得到字符串“PythonCat”,新的字符串是一個(gè)獨(dú)立的存在,它與基礎(chǔ)字符串“Python”并沒(méi)有關(guān)聯(lián)關(guān)系。
basename = "Python"myname = basename + "Cat"id(basename) == id(myname) >>> False
# 作為對(duì)比,列表能就地修改baselist = ["Python"]baselist.append("Cat")print(baselist) >>> ['Python', 'Cat']
字符串這種序列與其它序列(如列表、元組)的不同之處在于,它的“元素”限定了只能是Unicode碼點(diǎn)。Unicode碼點(diǎn)是什么呢?簡(jiǎn)單理解,就是用Unicode編碼的字符。那字符是什么呢? 字符 是人類(lèi)書(shū)寫(xiě)系統(tǒng)的各類(lèi)符號(hào),例如阿拉伯?dāng)?shù)字、拉丁字母、中文、日文、藏文、標(biāo)點(diǎn)符號(hào)、控制符號(hào)(換行符、制表符等)、其它特殊符號(hào)(@#¥%$*等等)。那Unicode編碼又是什么呢?Unicode別名是萬(wàn)國(guó)碼、國(guó)際碼,它是一種適用性最廣的、將書(shū)寫(xiě)字符編碼為計(jì)算機(jī)數(shù)字的標(biāo)準(zhǔn)。
新聞熱點(diǎn)
疑難解答
圖片精選