字符串

字符串有多种表现形式,用单引号('……')或双引号("……")标注的结果相同 。反斜杠 \ 用于转义;

字符串字面值可以实现跨行连续输入。实现方式是用三引号:"""..."""'''...''',字符串行尾会自动加上回车换行,如果不需要回车换行,在行尾添加 \ 即可。示例如下:

print('''
hello
world \
python
''')
#hello
#world python

字符串可以用 + 合并(粘到一起),也可以用 * 重复:

print('hello' + ' ' + 'world')
#hello world
print(3 * "hi ")
#hi hi hi

相邻的两个或多个 字符串字面值 (引号标注的字符)会自动合并,这项功能只能用于两个字面值,不能用于变量或表达式:

print('hello' ' world')
#hello world

索引

字符串支持 索引 (下标访问),第一个字符的索引是 0。单字符没有专用的类型,就是长度为一的字符串:

a = 'world'
print(a[0])
#w
print(a[4])
#d

索引还支持负数,用负数索引时,从右边开始计数:

a = 'world'
print(a[-0])
#w
print(a[-1])
#d
print(a[-4])
#o

注意,-0 和 0 一样,因此,负数索引从 -1 开始。

切片

除了索引,字符串还支持 切片。索引可以提取单个字符,切片 则提取子字符串:

a = 'world'
print(a[0:2])
#wo
print(a[2:5])
#rld

切片索引的默认值很有用;省略开始索引时,默认值为 0,省略结束索引时,默认为到字符串的结尾:

print(a[:3])
#wor
print(a[3:])
#ld
print(a[:-2])
#wor

注意,输出结果包含切片开始,但不包含切片结束。因此,s[:i] + s[i:] 总是等于 s

还可以这样理解切片,索引指向的是字符 之间 ,第一个字符的左侧标为 0,最后一个字符的右侧标为 nn 是字符串长度。例如:

+---+---+---+---+---+---+
 | P | y | t | h | o | n |
 +---+---+---+---+---+---+
 0   1   2   3   4   5   6
-6  -5  -4  -3  -2  -1

第一行数字是字符串中索引 0…6 的位置,第二行数字是对应的负数索引位置。ij 的切片由 ij 之间所有对应的字符组成。

对于使用非负索引的切片,如果两个索引都不越界,切片长度就是起止索引之差。例如, word[1:3] 的长度是 2。

索引越界会报错,但是,切片会自动处理越界索引:

print(a[3:598])
#ld

Python 字符串不能修改,是 immutable 的。因此,为字符串中某个索引位置赋值会报错:

要生成不同的字符串,应新建一个字符串.

内置函数 len() 返回字符串的长度:

print(len(a))
#5

常用相关函数

str.title():单词首字母大写,其余小写。

name ='hello world'
print(name.title())
#Hello World

str.lower():全部转小写。

name = 'HELLO WORLD'
print(name.lower())
#hello world

str.upper:全部转大写。

str.lstrip:清除字符串左侧的空格。

str.rstrip:清除字符串右侧的空格。

str.strip:清除字符串两侧的空格。

ord(str):字转数。

print(ord('d'))
#100

chr(num):数转字。

print(chr(100))
#d

字符串前缀u r b f

1.u前缀表示unicode,以Unicode字符来存储字符串。在python3中,字符串的存储方式中,不管前缀带不带u,默认方式都是unicode编码的字符串。

2.r前缀表示raw string,不识别转义,在引号前添加 r 即可:

print('Hello\n World')
#Hello
# World
print(r'Hello\n World')
#Hello\n World

3.b前缀表示bytearray,生成字节序列对象。比如在网络通信中,需要按字节序列发送数据时有用,如下

import socket
s = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
message = b'hello'
s.sendto(message,('127.0.0.1',3030))

4.f前缀表示format,用来格式化字符串。比format具有更好的可读性,如下

age = 38
name = "Annie"
print(f'his name is {name},{age} years old')
#his name is Annie,38 years old