当前位置:首页>python>4.1 字符串介绍 —— Python 中最常用的数据类型

4.1 字符串介绍 —— Python 中最常用的数据类型

  • 2026-10-10 22:51:33
4.1 字符串介绍 —— Python 中最常用的数据类型

4.1 字符串介绍 —— Python 中最常用的数据类型

你写的每一个 print(),其实都在和字符串打交道。字符串是 Python 中最基础也最常用的数据类型,几乎所有编程场景都离不开它。


🎯 本节要点:掌握字符串的创建、转义字符、原始字符串和基本操作

🔗 关联小程序: ch04_s4_1


一、什么是字符串?

字符串就是一段文本。它可以是单个字符,也可以是一整篇文章。

# 这些都是字符串"你""Hello, World!""合抱之木,生于毫末;九层之台,起于垒土;千里之行,始于足下。"

在 Python 中,字符串用引号包裹起来。你可以用单引号、双引号或三引号:

# 三种表示方式print('千里之行,始于足下。')print("千里之行,始于足下。")print("""合抱之木,生于毫末;九层之台,起于垒土;千里之行,始于足下。""")

运行结果:

千里之行,始于足下。千里之行,始于足下。合抱之木,生于毫末;九层之台,起于垒土;千里之行,始于足下。

三种引号的区别

引号类型
写法
适用场景
单引号
'内容'
最简单的字符串
双引号
"内容"
字符串内含单引号时
三单引号
'''内容'''
多行字符串
三双引号
"""内容"""
多行字符串(更常见)

经验之谈:日常编码中,单引号和双引号没有本质区别,选一种作为习惯即可。我自己习惯用单引号,但当字符串里本身有单引号时,就会换双引号。


二、引号嵌套——谁在里面谁在外面

有时候字符串里面本身就含有引号,这时候就需要区分内外的关系。

场景 1:字符串里有单引号

# 错误示范print('let's learn Python')    # 报错!

Python 看到 let 后面的单引号,会以为字符串结束了,结果后面的 s learn Python 就成了非法代码。

解决方法很简单:外层用双引号。

# 正确写法 1:外层用双引号print("let's learn Python")# 正确写法 2:外层用三引号print("""let's learn Python""")print('''let's learn Python''')

场景 2:字符串里有双引号

反过来,如果字符串里有双引号,外层就用单引号:

print('他说:"Python 真简单!"')

运行结果:

他说:"Python 真简单!"

一个快速记忆口诀

看引号:里面是什么,外面就换另一种。

简单吧?就是"我不能和你一样"的原则。


三、转义字符——让特殊字符"乖乖听话"

有时候你既要用单引号,又要用双引号——比如路径字符串:

E:\Python\new_features.txt

这里的反斜杠 \ 在 Python 中有特殊含义——它是转义字符的标志。

常见的转义字符

转义字符
含义
\'
单引号
\"
双引号
\\
反斜杠本身
\n
换行
\r
回车
\t
制表符(Tab)
\b
退格

来看看实际效果:

print('转义字符中:\n表示换行;\r表示回车;\b表示退格')

运行结果:

转义字符中:表示换行;表示回车;表示退格

看到了吗?\n 变成了换行,\r 让光标回到行首(所以"转义字符中:"后面的内容被覆盖了),\b 退格了一个字符。

用转义来输出引号

有时候就是想让字符串里既有单引号又有双引号,这时候用转义字符 \:

# 字符串里同时含单引号和双引号print('let\'s learn Python')print("How do you spell the word \"Python\"?")print("E:\\Python\\new_features.txt")

运行结果:

let's learn PythonHow do you spell the word "Python"?E:\Python\new_features.txt

💡 小提示:转义字符就像告诉 Python"别把后面的字符当语法看待,把它当普通文本"。\' 就是"这里的单引号是文本,不是字符串边界"。


四、原始字符串——让反斜杠回归本真

如果字符串里有大量反斜杠,每个都要写成 \\ 很麻烦。这时候可以用原始字符串:

# 普通字符串print('E:\\Python\\new_features.txt')# 原始字符串——前面加 rprint(r'E:\Python\new_features.txt')

运行结果:

E:\Python\new_features.txtE:\Python\new_features.txt

原始字符串的写法是在引号前面加 r(raw 的缩写),告诉 Python"这个字符串里的反斜杠就是普通反斜杠,不要转义"。

何时使用原始字符串?

场景
示例
Windows 文件路径
r'C:\Users\name\file.txt'
正则表达式
r'\d+\.\d+'
任何含大量反斜杠的文本
r'\n\t\r\b'
# 对比:没有原始字符串的痛苦path = 'C:\\Users\\Administrator\\Documents\\file.txt'# 有了原始字符串path = r'C:\Users\Administrator\Documents\file.txt'

💡 小提示:写 Windows 路径时,推荐用原始字符串,可以省去很多双反斜杠的麻烦。


五、字符串的索引和切片——"拆"着用字符串

字符串本质上是字符的有序序列,所以你可以像排队一样给每个字符编号。

索引:拿到指定位置的字符

word = 'Python'print(word[0])   # P(正数索引从 0 开始)print(word[1])   # yprint(word[5])   # nprint(word[-1])  # n(负数索引从 -1 开始,从右往左数)print(word[-6])  # P

运行结果:

PynnP

索引规则:

  • 正数索引:从 0 开始,从左往右数
  • 负数索引:从 -1 开始,从右往左数
  P    y    t    h    o    n  0    1    2    3    4    5   ← 正数索引 -6   -5   -4   -3   -2   -1   ← 负数索引

切片:拿到一段字符

切片就是"截取字符串的一部分",语法是 字符串[起始:结束:步长]:

word = 'Python'print(word[0:3])   # Pyt(从索引 0 到 3,不包含 3)print(word[:3])    # Pyt(省略起始,默认从 0 开始)print(word[3:])    # hon(省略结束,默认到结尾)print(word[:])     # Python(省略所有,就是完整字符串)print(word[0:5:2]) # Pto(步长为 2,隔一个取一个)print(word[::-1])  # nohtyP(反向取,常用技巧)

运行结果:

PytPythonPythonPtonohtyP

切片的核心口诀:

包头不包尾——起始包含,结束不包含。word[0:3] 取第 0、1、2 号字符,不取第 3 号。

常用切片技巧

text = 'Hello, Python!'# 取前 5 个字符print(text[:5])       # Hello# 取后 6 个字符print(text[-6:])      # ython!# 字符串反转(面试常考)print(text[::-1])     # !nohtyP ,olleH# 跳着取print(text[::2])      # Hlo yhn(每隔一个取一个)

六、字符串的常用操作

这部分先快速介绍几个基本操作,后面 4.3 会详细展开:

# len() —— 获取字符串长度text = 'Python'print(len(text))      # 6# in —— 判断子串是否存在print('Py'in text)   # Trueprint('py'in text)   # False(大小写敏感)# + —— 字符串拼接print('Hello' + ' ' + 'World')   # Hello World# * —— 字符串重复print('Ha' * 3)        # HaHaHa

运行结果:

6TrueFalseHello WorldHaHaHa

七、字符串的不可变性

这是新手容易踩的坑:字符串是不可变的。

text = 'Python'text[0] = 'J'# 报错!字符串不可修改

正确的做法是创建新字符串:

text = 'Python'new_text = 'J' + text[1:]   # 'Jython'print(new_text)

运行结果:

Jython

⚠️ 重要:所有"修改"字符串的操作,实际上都是创建了一个新字符串,原字符串不变。这一点在性能敏感的场景下要注意。


小结

字符串是 Python 编程的基本功中的基本功,这一节主要讲了:

知识点
要点
字符串定义
用引号包裹的文本,单双三引号都行
引号嵌套
内外不同就行
转义字符
\
 + 特定字符,如 \n\t\\
原始字符串
加 r,反斜杠不再转义
索引
[n]
 取某个字符,正数从 0 起,负数从 -1 起
切片
[起始:结束:步长]
,包头不包尾
不可变性
字符串不能原地修改,只能新建

下一节,我们来看字符串的格式化——怎么把变量值插进字符串里,做出有动态内容的文本。

最新文章

随机文章