什么是字符串(String)以及字符串不可变性(Immutability)?
在 Python 中,字符串(String,简称 str) 是最常用的数据类型之一。
无论是:
- 用户姓名
- 一段文字
- 邮箱地址
- 文件路径
- 网页链接
本质上都可以使用字符串来表示。
本节将学习:
- 什么是字符串
- 如何创建字符串
- 如何处理多行文本
- 如何在字符串中使用引号
- 如何判断字符串是否包含某些字符
- 如何获取字符串长度
- 什么是字符串索引
- 什么是字符串不可变性
什么是字符串(String)?
字符串就是:
由一个或多个字符组成,并使用引号包围的一段文本。
例如:
"Hello"
"Python"
"你好,世界"
"123"
它们都是字符串。
注意:
即使 "123" 看起来像数字,
由于它被引号包围,所以它仍然是字符串,而不是整数。
如何创建字符串?
Python 支持两种最常见的字符串写法。
使用单引号:
my_str_1 = 'Hello'
使用双引号:
my_str_2 = "World"
两种写法完全等价。
例如:
print('Python')
和:
print("Python")
输出都是:
Python
建议: 在同一个项目中保持统一的引号风格,可以让代码更整洁。
多行字符串
如果字符串内容有很多行,
可以使用三引号(Triple Quotes)。
三重双引号:
my_str = """第一行
第二行
第三行"""
或者三重单引号:
my_str = '''第一行
第二行
第三行'''
输出时会保留换行。
例如:
第一行
第二行
第三行
这种写法常用于:
- 长文本
- SQL 语句
- HTML 模板
- 程序说明
字符串中包含引号怎么办?
有时候,
字符串本身就包含引号。
例如:
It's a sunny day
这里:
It's
里面已经有一个单引号。
Python 提供了两种解决方案。
方法一:使用另一种引号包围字符串(推荐)
如果字符串里面有单引号,
就使用双引号包围:
msg = "It's a sunny day"
如果字符串里面有双引号,
就使用单引号包围:
quote = 'She said, "Hello World!"'
这是最简单、最推荐的方法。
方法二:使用转义字符(Escape Character)
如果必须使用同一种引号,
可以在引号前添加反斜杠 \。
例如:
msg = 'It\'s a sunny day'
或者:
quote = "She said, \"Hello!\""
这里:
\
叫做:
转义字符(Escape Character)
它告诉 Python:
后面的引号只是普通字符,不表示字符串结束。
判断字符串是否包含某些内容
Python 提供了:
in
运算符。
作用是:
判断一个字符串是否包含指定字符或子字符串。
返回结果:
TrueFalse
例如:
my_str = "Hello world"
print("Hello" in my_str)
输出:
True
因为:
Hello
确实存在。
再例如:
print("Python" in my_str)
输出:
False
因为:
Python
并不存在。
也可以判断单个字符:
print("e" in my_str)
输出:
True
获取字符串长度
有时候,
我们需要知道字符串有多少个字符。
Python 提供:
len()
函数。
例如:
my_str = "Hello world"
print(len(my_str))
输出:
11
这里:
空格也算一个字符。
因此:
Hello world
一共有:
11 个字符
字符串索引(Index)
字符串中的每一个字符,
都有自己的位置编号。
这个编号叫做:
索引(Index)
Python 使用:
从 0 开始编号。
例如:
Hello world
对应索引如下:
| 字符 | H | e | l | l | o | 空格 | w | o | r | l | d |
|---|---|---|---|---|---|---|---|---|---|---|---|
| 索引 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
获取指定字符:
my_str = "Hello world"
print(my_str[0])
输出:
H
获取:
print(my_str[6])
输出:
w
访问字符时使用:
字符串[索引]
负索引
除了正索引,
Python 还支持:
负索引(Negative Index)。
负索引表示:
从字符串末尾开始数。
例如:
| 字符 | H | e | l | l | o | 空格 | w | o | r | l | d |
|---|---|---|---|---|---|---|---|---|---|---|---|
| 负索引 | -11 | -10 | -9 | -8 | -7 | -6 | -5 | -4 | -3 | -2 | -1 |
例如:
print(my_str[-1])
输出:
d
再例如:
print(my_str[-2])
输出:
l
使用负索引时,
无需提前知道字符串长度,非常方便。
什么是不可变性(Immutability)?
这是 Python 字符串最重要的特性之一。
不可变(Immutable) 的意思是:
对象创建以后,里面的内容不能直接修改。
字符串就是不可变对象。
例如:
greeting = "hi"
之后:
greeting = "hello"
这是允许的。
因为:
这里并不是修改原来的字符串,
而是让变量:
greeting
重新指向了一个新的字符串对象。
最终输出:
print(greeting)
结果:
hello
为什么不能修改字符串?
假设:
greeting = "hi"
很多初学者会尝试:
greeting[0] = "H"
希望得到:
Hi
但是程序会报错:
TypeError:
'str' object does not support item assignment
原因就是:
字符串中的字符不能被直接替换。
也就是说:
"hi"
一旦创建,
里面的:
h
和:
i
就不能直接修改。
如果需要新的内容,
必须重新创建一个新的字符串。
可变对象和不可变对象
Python 中的数据类型可以简单分为两类。
| 类型 | 是否可以修改 | 示例 |
|---|---|---|
| 不可变(Immutable) | ❌ 不可以 | str、int、float、bool、tuple、range |
| 可变(Mutable) | ✅ 可以 | list、dict、set |
例如:
列表可以修改:
numbers = [1, 2, 3]
numbers[0] = 100
这是允许的。
但是:
text = "Hello"
text[0] = "h"
这是不允许的。
学习小结
| 知识点 | 说明 |
|---|---|
字符串(str) |
用于表示文本,由单引号、双引号或三引号包围。 |
| 三引号 | 用于创建多行字符串。 |
| 引号处理 | 可以使用不同类型的引号包围字符串,或使用 \ 进行转义。 |
in 运算符 |
判断字符串是否包含指定字符或子字符串,返回 True 或 False。 |
len() |
获取字符串长度(字符数量)。 |
| 索引(Index) | 使用 字符串[索引] 获取指定位置的字符,索引从 0 开始,也支持负索引。 |
| 不可变性(Immutability) | 字符串创建后不能直接修改字符,只能重新创建新的字符串对象。 |
总结
- 字符串(
str)是 Python 中表示文本的数据类型,可以使用单引号、双引号或三引号创建。 - 可以使用
in判断字符串是否包含指定内容,使用len()获取字符串长度,使用索引访问指定位置的字符。 - Python 的字符串支持正索引和负索引,方便从前或从后访问字符。
- 字符串属于不可变对象(Immutable),创建后不能直接修改其中的字符;如果需要改变内容,应创建一个新的字符串并重新赋值给变量。
- 理解字符串及其不可变性,是后续学习字符串方法、切片(Slice)和文本处理的重要基础。