python可以用单引号''
或双引号""
标识。可以用\
来转义引号:
'spam eggs' #单引号
'spam eggs'
'doesn\'t' #用\'转义单引号
"doesn't"
"doesn't" #或者用双引号代替
"doesn't"
'"Yes,"he said.'
'"Yes,"he said.'
"\"Yes,\"he said."
'"Yes,"he said.'
'"Isn\'t," she said.'
'"Isn\'t," she said.'
如果字符串中只有单引号而没有双引号,就用双引号引用,否则用单引号。 在交互式解释器中,输出的字符串外会自带引号,特殊字符会用反斜杠转义,虽然有时看起来反斜杠还存在,但事实上已经对特殊字符进行过转义了。print()函数可以生成可读性更好的输出,它会省去引号并且打印出已经转义后的特殊字符:
print('"Isn\'t," she said.')
"Isn't," she said.
s = 'First line.\nSecond line.' # \n代表换行
s #没有print()函数, \n也会被打印出来
'First line.\nSecond line.'
print(s) #用print()函数,\n进行了换行
First line.
Second line.
如果字符串本身存在的\被当作转义字符而无法正常输出,可以使用原始字符串,方法是在第一个引号前加一个r
:
print('C:\some\name') #在这里 \n会执行换行!
C:\some
ame
print(r'C:\some\name') #加了r后,这就是一个原始字符串
C:\some\name
字符串文本能够分成多行。一种方法是用三引号:"""..."""
或者'''...'''
。行尾转换符会被自动包含到字符串中,但是可以加上\
来避免这个行为。
print('''\
"第一行"
"第二行"
"第三行"''')
"第一行"
"第二行"
"第三行"
字符串可以由+操作符组合到一起,可以由*
来多重复几次,类似于乘法
3 * '3' + '1'
'3331'
相邻的两个字符串文本会自动连接在一起
'Py' 'thon'
'Python'
但是只作用于字符串文本,不能用于字符串表达式:
prefix = 'Py'
prefix'thon' #不能将一个变量和一段字符串文本连接
File "<ipython-input-28-12ca31813869>", line 2
prefix'thon' #不能将一个变量和一段字符串文本连接
^
SyntaxError: invalid syntax
('3' * 3)'1' #也不能用于此,'3'乘3后已经不是一段字符串文本
File "<ipython-input-25-20bf3ae1a72c>", line 1
('3' * 3)'1'
^
SyntaxError: invalid syntax
如果想连接多个变量或者将一个变量和字符串文本连接在一起,可以用+
:
prefix + 'thon'
'Python'
这个功能在你想切分很长的字符串时很有用:
text = ('Put several strings whthin parentheses '+
'to have them joined together.')
text
'Put several strings whthin parentheses to have them joined together.'
字符串也可以被截取(检索)。类似于C,字符串的第一个字符索引为0。Python没有单独的字符类
型;一个字符就是一个简单的长度为1的字符串:
word = 'Python'
word[0]
'P'
word[5]
'n'
索引也可以是负数,此时会从右边开始计算,例如:
word[-1]
'n'
此时要注意,-0就是0,所以不会从右边开始计算。
除了索引,还支持切片操作。索引用于获得单个字符,切片可以获得一个子字符串:
word[0:2] #从0到2的子字符串,注意:包括0但不包括2,取头不取尾
'Py'
word[2:5] #从2到5的字符串, 注意:包括2不包括5,取头不取尾
'tho'
由于取头不取尾,这使得s[:i] + s[i:]
永远等于s:
word[:2] + word[2:]
'Python'
切片的索引有非常有用的默认值;如果省略第一个索引,则它默认为0。如果省略第二个索引,则默认为切片的字符串的大小:
word[:2] #从开始到2,不包括2
'Py'
word[4:] #从4到末尾,包括4,也包括末尾
'on'
word[-2:] #从倒数第二个到末尾,包括倒数第二个,也包括末尾
'on'
试图索引超过字符串会报错:
word[42]
---------------------------------------------------------------------------
IndexError Traceback (most recent call last)
<ipython-input-46-4d0f20275732> in <module>()
----> 1 word[42]
IndexError: string index out of range
Python能够优雅地处理那些没有意义的切片索引:一个超过字符串范围的索引值将被字符串实际的长度代替,而当切片左值大于右值时,会返回空字符串:
word[4:42]
'on'
word[42:]
''
Python字符串不可以被更改——他们是不可变的。因此,赋值给字符串索引的位置会导致错误:
word[0] = 'J'
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-49-91a956888ca7> in <module>()
----> 1 word[0] = 'J'
TypeError: 'str' object does not support item assignment
word[2:] = 'py'
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-50-6488bbf78f5a> in <module>()
----> 1 word[2:] = 'py'
TypeError: 'str' object does not support item assignment
'a' = 'b'
File "<ipython-input-51-6a38823e5751>", line 1
'a' = 'b'
^
SyntaxError: can't assign to literal
那么如果你需要一个不同的字符串, 应该建一个新的:
'J' + word[1:]
'Jython'
内置函数len()可以返回字符串长度:
s = 'supercalifragilisticexpialidocious'
len(s)
34