3.1.2.字符串

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

知识点总结:

字符串的生成: 单双引号,转义特殊符号

字符串的合成: 字符串文本直接放一起,其他用+

字符串的索引与切片: 0代表第一个字符,-1代表倒数第一个字符。 切片时取头不取尾。切片时,索引超过范围会自动取可取的最大值。

字符串的特征: 不可改变。 len()函数可返回字符串长度

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值