字符串的本質是:字符序列。Python的字符串是不可變的,我們無法對原字符串做任何修改。但,可以將字符串的一部分復制到新創建的字符串,達到“看起來修改”的效果。
Python不支持單字符類型選,單字符也是作為一個字符串使用的。
Python3直接支持Unicode,可以表示世界上任何書面語言的字符。Python3的字符默認就是16為編碼的Unicode編碼,ASCⅡ是Unicode編碼的子集。所以一個漢字在Unicode編碼中表示的長度是1。
使用內置函數ord()可以把字符轉成對應Unicode碼。
使用內置函數chr()可以把十進制數字轉換成對應的字符。
我們可以通過單引號或雙引號創建字符串。例如:
可以通過使用兩種引號創建本身就包含引號頂點字符串,而不使用轉義字符。例如:
連續三個單引號或三個雙引號,可以幫助我們創建多行字符串。例如
Python允許空字符串的存在,不包含任何字符且長度為0。len()用於計算字符串含有多少字符。例如:
我們可以使用"\+特殊字符",實現某些難以用字符表示的效果。例如:換行等。常見的的注意字符如下:
1.可以使用+號將多個字符串拼接起來。例如:
(1)如果+兩邊都是字符串,則拼接
(2)如果+兩邊都是數字,則加法運算
(3)如果+兩邊類型不同,則拋出異常
2.可以將多個字符串直接放在一起拼接,例如:
注意:在字符串拼接中,+兩邊可以是字符串或變量,而直接放在一起拼接只能是字符串不能是變量。
可以使用*實現字符串復制,可以復制字符串,也可以復制指向字符串的變量。 例如:
在前面調用print時,會自動打印一個換行符。有事,我們不想換行,不想自動添加換行符。我們可以自己通過參數end="任意字符串"。實現末位想添加任何內容:
在源文件中:
運行結果:
我們可以使用input()從控制台讀取鍵盤輸入的內容。在input()括號中的可以設置字符串,作為輸入提示信息:
str()可以幫助我們將其他數據類型轉換為字符串例如:
當我們調用print()函數是,解釋器自動調用了str()將非字符對象轉成了字符串。
字符串的本質是字符序列,我們可以通過在字符串後面添加[],在[]裡面指定偏移量,可以提取單個字符串。
正向搜索:
最左側的第一字符,偏移量是0,第二個偏移量是1,一次類推。直到len(str)-1為止。
反向搜索:
最右側第一字符,偏移量是-1.倒數第二個是-2,以此類推,直到-len(str)為止。
字符串是“不可改變“”的,我們可以通過[]可以獲取字符串指定位置的字符,但我們不能改變字符串。我們嘗試改變字符串中的某個字符串,發現報錯了:
字符串不可改變。但是,我們的確有時候需要替換某些字符。這時,只能通過創建新的字符串來實現。
·
整個過程中,實際上我們是創建了新的字符串對象, 而變量a指向的字符串對象並沒有改變。但如果將新的字符串對象指向變量a,變量a引用的對象發生了改變。內存圖如下:
切片slice操作可以讓我們快速的提取子字符串。標准格式為:
[起始偏移量 start:終止偏移量 end:步長 step] 典型操作(三個數為正數的情況下):"abcdef"[1:5:2]
"bd"其它操作(三個量為負數)的情況:
切片操作時,起始偏移量和終止偏移量不在[0:字符串長度-1]這個范圍,也不會報錯。例如:
1.將"to be or not to be"字符串倒序輸出
2.將"sxtsxtsxtsxtsxt"字符串中所有的 s 輸出
split()可以基於指定分割符將字符分隔成多個子字符串(存儲到列表中)。如果不指定分割符,則默認使用空白字符(換行符/空格/制表符)。示例代碼如下:
join()的作用和split()作用剛好相反,用於將一系列子字符串(列表)連接起來(字符串)。示例代碼如下:
字符串拼接要點:
使用字符傳拼接符+,會產生新的字符串對象,因此不推薦使用+來拼接字符串。推薦使用join函數,因為join函數在拼接字符串之前按會計算所有字符串的長度,然後逐一拷貝,僅新建一次對象。
測試+拼接符和join(),不同的效率:
運行結果:
字符串駐留:僅保存一份相同且不可變字符串的方法,不同的值被存放在字符串駐留池中。Python支持字符串駐留機制,對於符合要要求的字符串(僅包含下劃線(_)、字母、數字)會啟用字符串駐留機制。
字符串駐留發生在compile_time,而不是run_time。
我們可以直接使用==,!=對字符串進行比較,是否含有相同的字符。
我們使用is/ not is,判斷兩個對象是否同一個對象。比較的是對象的地址,即id(obj1)是否和id(obj2)相等。
in / not in 關鍵字,判斷某個字符串(子字符串)是否存在與字符串中。
字符串有很多常用的方法,我們需要熟悉。
以一段文本作為測試:
a='我叫彭XX,今年20,我在JXUST大學讀書。我們沒有女朋友,xdm都出去陪女朋友,而我只能敲代碼,哇,為什麼,同樣是人,為什麼我還要敲代碼!算了,我還是得敲,老子好好學習,卷死它們,不說了,敲代碼去了!'
我們可以通過strip()去除字符串首尾指定信息。通過lstrip()去除字符串左邊指定信息,rstrio()去除字符串右邊指定信息。
編程中關於字符串大小寫轉換的情況,經常遇見。相關方法匯總如下:
設定一個測試變量:
a="Phh is 'single'"
center()、ljust()、rjust()這三個函數用於對字符串實現排版。
Python2.6 開始,新增一種格式化字符串函數str.format(),它增強了字符串格式化的功能。
基本語法是通過{}和:來代替以前的%。
format()函數可以接受不限個參數,位置可以不按順序。
參數格式:'{[index][:[fill] align][sign][#][width][.precision][type]} {……}{……} '.format()
以上參數的意義是:
注意,格式中的[ ]內的參數都是可選參數,可以使用也可以不使用。
index:指定冒號:後面除出現的參數在formart()中的索引值,如果沒有,則按format()中的默認順序分配。
fill:指定空白處的填充符號,默認為空白填充。
align:指定數字的對齊方式。
sign:指定有無符號數。
width:指定輸出數據時所占的寬度
precision:如果後面存在type參數,則指的是保留小數的位數,
如果type參數不存在,則是指有效數字的位數
type:指定輸出數據的具體類型
在Python中,字符串屬於不可變對象,不支持原地修改,如果需要修改其中的值,智能創建新的字符串對象。但是,經常我們的確需要原地修改字符串,可以使用io.StringIO對象或array模塊。
1.從控制台輸入用戶的月薪,進行運算計算出年薪。打印輸出用戶的年薪
2.使用字符串復制,用計算機打印出“愛你一百遍”,打印 100 次
3.判斷如下輸出結果,並文字解釋原因:
>>> a = "abd_33" >>> b = "abd_33" >>> c = "dd#" >>> d = "dd#" >>> a is b #輸出 true or false? >>> c is d #輸出 true or false? 字符串駐留機制 4. 寫出如下代碼打印的結果: >>> c = "名字是{name},年齡是{age}" >>> c.format(age=19,name='phh') '名字是phh,年齡是19'