python字符串是什么:本质与用法
python字符串是什么?它是Python中用来存储和处理文本的内置序列类型,官方文档docs.python.org的「Built-inTypes」条目将其命名为str,在Python3里默认由Unicode字符组成,不可修改,用单引号、双引号或三引号包裹后直接赋值给变量即可使用。你日常读写文件、拼接提示词、处理用户输入、做正则匹配,底层操作的都是str对象;它支持索引、切片、遍历和大量内置方法,同时与bytes(字节串)严格区分,后者用于网络传输和二进制文件。它一旦创建就不能原地改动,任何看似修改的操作都会返回一个新字符串;这一特性对内存友好,但如果你在循环里大量用+拼接字符串,会产生大量临时对象,数据量超过一万行时性能下降明显。
python字符串的本质
str本质上是一个有序的字符容器,每个字符在内存里占独立位置,下标从0开始编号。你可以把它想象成一串用线穿起来的珠子,每个珠子是一个字符,线就是固定的顺序。Python不单独提供"字符类型",哪怕长度为1的"a"也是一个str对象,这一点和C语言用char存储单个字符的做法不同。
它不可变。
python字符串的三种写法
单引号和双引号在Python里完全等价,选哪种只取决于字符串内部是否包含同一种引号。内部有单引号就用双引号包裹,内部有双引号就用单引号包裹,避免频繁写反斜杠转义。三引号(三个单引号或三个双引号)用于跨多行的文本,换行符会原样保留在字符串里,常用来写函数文档注释或长段提示词。
字面量的包裹方式对应三种使用场景:
- 单行文本用'...'或"..."
- 多行文本用'''...'''或"""..."""
- 原始字符串加r前缀,反斜杠不转义,适合写正则表达式和Windows文件路径
python字符串的常用操作
索引用方括号加下标,s[0]取第一个字符,s[-1]取最后一个;切片用s[起始:结束:步长],包头不包尾,s[1:4]取索引1到3的字符,s[::-1]能把整串反转。遍历直接写forcins,每次拿到一个字符;拼接用+号或join方法,处理十几个以上片段时优先用str.join(iterable),它会一次性计算总长度再分配内存,比反复+拼接省掉大量中间对象。
内置方法覆盖了绝大多数文本处理场景。s.upper()和s.lower()做大小写转换,s.strip()去掉首尾空白,s.split(',')按逗号切成列表,','.join(list)把列表拼成字符串,s.replace('旧','新')做替换,s.format()或f-string做变量插值。判断类方法s.isdigit()、s.isalpha()、s.startswith()返回布尔值,适合写在条件分支里。
python字符串与字节串的区别
str和bytes不能直接混用,这是初学者经常卡住的地方。前者是人类可读的文本,后者是0和1组成的字节序列,二者通过encode()和decode()互相转换,编码方式通常用'utf-8'。
| 对比项 | str(字符串) | bytes(字节串) |
|---|---|---|
| 主要用途 | 处理文本、展示给用户 | 网络传输、读写二进制文件 |
| 字面量写法 | 'abc'或"abc" | b'abc' |
| 互相转换 | s.encode('utf-8')转bytes | b.decode('utf-8')转str |
| 常见报错 | 写二进制文件时被要求传bytes | print中文时无法直接解码 |
该知识的适用边界是Python3.x环境。Python2里str默认是字节串,unicode类型才对应Python3的str,如果你在维护老项目或看到网上代码混用unicode()和str(),不要直接照搬,先确认运行环境的Python版本;混用encode/decode且不指定编码时,Windows控制台默认用GBK,Linux和macOS默认用UTF-8,跨平台处理中文文件时务必显式写上'utf-8'。
