字符串
字符串有多种表现形式,用单引号('……'
)或双引号("……"
)标注的结果相同 。反斜杠 \
用于转义;
字符串字面值可以实现跨行连续输入。实现方式是用三引号:"""..."""
或 '''...'''
,字符串行尾会自动加上回车换行,如果不需要回车换行,在行尾添加 \
即可。示例如下:
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,最后一个字符的右侧标为 n ,n 是字符串长度。例如:
+---+---+---+---+---+---+
| P | y | t | h | o | n |
+---+---+---+---+---+---+
0 1 2 3 4 5 6
-6 -5 -4 -3 -2 -1
第一行数字是字符串中索引 0…6 的位置,第二行数字是对应的负数索引位置。i 到 j 的切片由 i 和 j 之间所有对应的字符组成。
对于使用非负索引的切片,如果两个索引都不越界,切片长度就是起止索引之差。例如, 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