前面几篇我们聊了基础语法、流程控制和数字类型,今天来啃一块硬骨头——字符串。Python 处理字符串的能力特别强,可以说这是它最拿手的领域之一。不管是爬虫抓网页、处理用户输入,还是做数据分析,字符串操作都是基本功。
字符串就是用引号包起来的一串字符。在 Python 里,引号非常灵活,单引号、双引号、三引号都能用,效果基本一样。
单引号双引号效果一样,但字符串里有引号的时候要错开用。比如字符串本身包含英文单引号,那外面就用双引号包起来,反之亦然。三引号最大的用处不是多行字符串,而是写文档注释(docstring)。
# 四种写法都行name = '小明'city = "北京"poem = '''春眠不觉晓处处闻啼鸟'''description = """这是一个很长的多行描述文字"""
访问字符
字符串像一排抽屉,每个字符都有自己的编号。要取出某个字符,只需要在方括号里写上编号就行。
这里要特别注意:索引从 0 开始。第一个字符的编号是 0,不是 1。这是新手最容易搞混的地方,一定要记住!
💡 小贴士
负索引是 Python 的特色,-1 代表最后一个,-2 代表倒数第二个,不用算长度。比如 fruit[-1] 就能直接拿到最后一个字符,非常方便。
fruit = '草莓'# 取第一个字print(fruit[0]) # 草# 取最后一个字(负索引很方便)print(fruit[-1]) # 莓
切片操作
切片就像切蛋糕,可以一次性取出一段连续字符。语法是 [起始位置:结束位置],返回起始位置到结束位置之前的所有字符。
💡 小贴士
切片是左闭右开,url[4:10] 取的是第4到第9个字符,不包含第10个。新手经常在这踩坑,记住就理解了!
url = 'www.python.org'# 取中间部分print(url[4:10]) # python# 从头取到第4个print(url[:4]) # www.# 从第11个取到末尾print(url[11:]) # org# 反转字符串(小技巧)print(url[::-1]) # gro.nohtyp.www
字符编码
计算机里每个字符都有一个对应的数字编号,叫做编码。ord() 可以查字符的编码,chr() 可以把编码转回字符。
💡 小贴士
做加密、字符判断的时候 ord() 特别好用。比如判断是不是大写字母:'A' <= ch <= 'Z'
# 查字符的编码print(ord('中')) # 20013print(ord('A')) # 65# 编码转回字符print(chr(20013)) # 中print(chr(128512)) # 😀
有些字符在字符串里有特殊含义,比如引号本身、换行、制表符,直接写会出问题,这时候就需要转义字符——在前面加一个反斜杠 \ 来表示它的原义。
| | |
|---|
\\ | | s = "很长很长\很长" |
\n | | "第一行\n第二行" |
\t | | "姓名\t年龄" |
\r | | "进度100%\r完成" |
\b | | "abc\bd" → "abd" |
\000 | | "\000" |
💡 小贴士
最常用的就是 \n(换行)和 \t(制表符),其他的基本用不到。如果你不想转义,在字符串前面加 r 就行,比如 r'\n' 就是一个反斜杠加n。
字符串有自己的"运算规则",跟数字不太一样。下面用表格和例子来认识它们:
| | | |
|---|
+ | | "你好" + "世界" | "你好世界" |
* | | "哈" * 3 | "哈哈哈" |
[] | | "你好"[0] | "你" |
[:] | | "你好世界"[1:3] | "好世" |
in | | "好" in "你好" | True |
not in | | "坏" not in "你好" | True |
r/R | | r"\n不是换行" | \n不是换行 |
greeting = '你好'name = 'Python'# 拼接print(greeting + name) # 你好Python# 重复print('哈' * 3) # 哈哈哈# 判断包含print('好' in greeting) # Trueprint('坏' not in greeting) # True# 原样输出(不转义)print(r'C:\new\test') # C:\new\test
💡 小贴士
+ 拼接字符串虽然方便,但如果要拼接很多个,用 join() 方法效率更高,后面会讲。
字符串格式化就是把变量的值塞进字符串里。这是 Python 里特别实用的技能,有三种写法:
方式一:% 占位符(老派写法)
这是早期的写法,有点像 C 语言的 printf,现在老代码里还能见到。
| | |
|---|
%s | | "你好 %s" % "世界" |
%d | | "数量:%d" % 5 |
%f | | "价格:%.2f" % 9.9 |
方式二:format() 方法
这是更灵活的写法,可以用位置、编号或者关键字来指定变量的位置。
# 按位置print('{}今年{}岁'.format('小明', 18))# 按编号(可以重复用)print('{0}说:{1},{0}又说:好的'.format('老师', '上课了'))# 按关键字print('{name}考了{score}分'.format(name='小红', score=95))
方式三:f-string(强烈推荐!)
这是 Python 3.6+ 才有的写法,最简洁、最优雅!在字符串前面加个 f,然后在大括号里直接写变量名,太方便了!
name = '小明'age = 18score = 95.5# 直接在大括号里写变量,太方便了print(f'{name}今年{age}岁,考了{score:.1f}分')# 甚至可以写表达式print(f'明年{age + 1}岁')print(f'名字长度:{len(name)}')
💡 小贴士
新手推荐直接学 f-string,写法最简单,可读性最好。% 格式化是老代码里常见的,能看懂就行。
字符串是 Python 里用得最多的数据类型,这几个知识点日常开发几乎天天用到。f-string 务必掌握,用了就回不去了。下一篇我们聊聊字符串的常用方法,让操作更高效,记得关注!