| >>> "Justin"'Justin' >>> 'Justin''Justin' >>> "Just'in""Just'in" >>> 'Just"in''Just"in' >>> 'Just' 'in''Justin' |
單引號或雙引號的字串表示,在Python中可以交替使用,就像上例中,若要在字串中包括單引號,則使用雙引號包括字元序列,反之亦然。如果有兩個連續的字串實字,Python會自動將之結合為一個字串。
在Python撰寫字串至力於簡潔易讀,字串中若包括\,則會自動轉換為\\,所以可以直接如下撰寫字串:
| >>> 'c:\workspace''c:\\workspace' >>> 'c:\\workspace''c:\\workspace' >>> |
在Python中,直接撰寫'c:\workspace',就如同你自行撰寫'c:\\workspace',前者在撰寫與可讀性上都比較方便。\\是跳離(Escape)字串表示,另外還有一些常用的跳離(Escape)字串表示:
| \\ | 反斜線 |
| \' | 單引號 ' |
| \" | 雙引號 " |
| \ooo | 以8 進位數指定字元,最多三位數 |
| \xhh | 以16進 位數指定字元,至少兩位數 |
| \uhhhh | 以Unicode 16位元編碼指定字元 |
| \Uhhhh | 以Unicode 32位元編碼指定字元 |
| \0 | 空字元 |
| \n | 換行 |
| \r | 歸位 |
| \t | Tab |
如果你想要表示跳離字串表示,例如要表示\t,則必須撰寫'\\t'來表示,這有些不方便,這時你可以使用原始字串(Raw String)表示,只要在字串前加上r即可。例如:
| >>> print('\t') >>> print('\\t')\t >>> print(r'\t')\t >>> print('c:\\workspace')c:\workspace >>> print(r'c:\\workspace')c:\\workspace >>> '\t''\t' >>> r'\t''\\t' >>> 'c:\\workspace''c:\\workspace' >>> r'c:\\workspace''c:\\\\workspace' >>> |
如果你的字串內容必須跨越數行,則可以使用三重引號。例如:
| >>> '''Justin is caterpillar! ... caterpillar is Justin!''' 'Justin is caterpillar!\n caterpillar is Justin!' >>> text = '''Justin is caterpillar! ... caterpillar is Justin!''' >>> print(text)Justin is caterpillar! caterpillar is Justin! >>> |
你在三重引號之間輸入任何內容,則最後的字串就照單全收,包括換行、縮排等。
如果你想知道字串的長度,則可以使用len()函式。例如:
| >>> text = 'Justin' >>> len(text)6 >>> |
你可以使用for迴圈逐一取出字串中的字元:
| >>> for c in 'Justin': ... print(c, end='-') ...J-u-s-t-i-n->>> |
或者是使用in運算子測試某個字串是否在原字串中:
| >>> 'Just' in 'Justin'True >>> |
可以使用+運算子來串接字串,使用*可以重複字串:
| >>> text1 = 'Just' >>> text2 = 'in' >>> text1 + text2'Justin' >>> text1 * 10'JustJustJustJustJustJustJustJustJustJust' >>> |
在Python中,字串是不可變動的(Immutable),所以+實際會產生新的字串,在強弱型別的光譜中,Python比較偏強型別,型態較不能自行轉換,例如Python中,不能混合字串與數字進行+運算,你得自己將數字轉為字串,才可以進行字串串接:
| >>> 'score: ' + 90Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: Can't convert 'int' object to str implicitly >>> 'score: ' + str(90)'score: 90' >>> |
如上例所示,你可以使用str()類別將數值轉換為字串。如果你想知道某個字元的編碼,則可以使用ord()函式,使用chr()則可以將指定編碼轉換為字元:
| >>> ord('元')20803 >>> chr(20803)'元' >>> |
字串是由字元序列所組成,如果你想要取得字串中某個字元,則可以使用[]指定索引,索引從0開始。例如:
| >>> name = 'Justin' >>> name[0]'J' >>> name[1]'u' >>> name[-1]'n' >>> |
Python中的索引,不僅可指定正值,還可以指定負值,實際上了解索引意義的開發人員,都知道索引其實就是相對第一個元素的偏移值,在Python中,正值索引就是指正偏移值,負值索引就是負偏移值,也就是-1索引就是倒數第一個元素,-2索引就是倒數第二個元素。
[]運算子還可以進行切片(Slice)運算。例如:
| >>> name[0:3]'Jus' >>> name[3:]'tin' >>> name[:4]'Just' >>> name[:-1]'Justi' >>> name[-5:-1] 'usti' >>> |
上例中指出了切片運算,可以指定起始索引(包括)與結尾索引(不包括)來切出子字串。如果只指定起始索引,不指定結尾索引,則表示切出從起始索引至字串結束間的子字串。如果只指定結尾索引,不指定起始索引,則表示切出從0索引至(不包括)結尾索引間的子字串。起始索引與結尾索引都可以指定負值。([:]則是作淺層複製,只不過對字串這種不可變動的物件沒有實質意義)
切片運算的另一個形式是[i:j:k],意思是切出起始索引i與結尾索引j(不包括)之間,每隔k元素的內容。例如:
| >>> name[0:4:2]'Js' >>> name[2::2]'si' >>> name[:5:2]'Jsi' >>> name[::2]'Jsi' >>> name[::-1]'nitsuJ' >>> |
注意最後一個範例,當間隔指定為正時,表示正偏移每k個取出元素,間隔指定為負時,表示負偏移每k個取出元素。[::-1]表示從索引0至結尾,以負偏移1方式取得字串,結果就是反轉字串。
在Python中,非物件專屬的操作,是以函式的方式提供,例如之前的len()函式並不只能用在字串,而可以用在所有的串列物件(只要該物件上有__len__()方法)。物件專屬的操作,則是物件上的方法,例如以下示範幾個字串專屬方法:
| >>> name.index('i')4 >>> name.upper()'JUSTIN' >>> name.lower()'justin' >>> name.startswith('J')True >>> |
沒有留言:
張貼留言