惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

腾讯CDC
N
Netflix TechBlog - Medium
Google DeepMind News
Google DeepMind News
Scott Helme
Scott Helme
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
小众软件
小众软件
月光博客
月光博客
有赞技术团队
有赞技术团队
Microsoft Security Blog
Microsoft Security Blog
爱范儿
爱范儿
WordPress大学
WordPress大学
Jina AI
Jina AI
M
MIT News - Artificial intelligence
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
阮一峰的网络日志
阮一峰的网络日志
B
Blog RSS Feed
P
Proofpoint News Feed
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
F
Fortinet All Blogs
Y
Y Combinator Blog
Microsoft Azure Blog
Microsoft Azure Blog
云风的 BLOG
云风的 BLOG
Hugging Face - Blog
Hugging Face - Blog
MongoDB | Blog
MongoDB | Blog
I
InfoQ
Vercel News
Vercel News
C
Check Point Blog
美团技术团队
V
V2EX
量子位
博客园 - 三生石上(FineUI控件)
D
DataBreaches.Net
G
Google Developers Blog
博客园_首页
J
Java Code Geeks
Recent Announcements
Recent Announcements
人人都是产品经理
人人都是产品经理
H
Help Net Security
博客园 - Franky
The GitHub Blog
The GitHub Blog
V
Visual Studio Blog
T
Tailwind CSS Blog
IT之家
IT之家
S
SegmentFault 最新的问题
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
雷峰网
雷峰网
L
LangChain Blog
博客园 - 司徒正美
T
The Blog of Author Tim Ferriss
H
Hackread – Cybersecurity News, Data Breaches, AI and More

博客园 - 箫笛

Tkinter - Entry 输入框组件 Tkinter - Button 组件 Tkinter - Label 组件 Tkinter - tk 变量 Tkinter - 事件与绑定 Tkinter - 几何管理器 Tkinter - 核心概念 Tkinter - 快速开始 Tkinter - 介绍 Python 编程 - 条件表达式 Python 编程 - 星号下划线参数释义 shell 编程 - shell 脚本的交互方式 Python insall - macOS 系统安装python的几种方式 Miniconda - Python 环境管理工具 Tkinter - Python GUI 开发 Python 编程 - 下划线命名的区别 Python 编程 - 元类编程 Python 编程 - 多重继承与MRO Python 编程 - 描述符协议 Python 编程 - 类型注解 Python 编程 - 生成器表达式 Python 编程 - 集合 Python 编程 - 装饰器 Python 编程 - 闭包 Python 编程 - 列表推导式 Python 编程 - 函数式编程 Python 编程 - lambda 函数 Python 编程 - 文件操作 Python 编程 - 输入与输出 Python 编程 - 面向对象编程 Python 编程 - 元组(tuple) Python 编程 - 字典(dict) Python 编程 - 列表(list) Python 编程 - 数据类型和数据结构 Python 编程 - 语句 Python 编程 - 函数 windows - WSL 的安装与使用 shell编程 - dialog 程序使用指南 FE Team - 如何做好前端代码审查 git 提交的撤销和恢复 React15 - redux-saga 如何在saga中实现轮询接口调用? React15 - React CSS Modules BEM命名实践 React15 - React 15 中 componentWillReceiveProps 为什么会多次调用, 同时componentDidUpdate 也会多次调用? React15 - React15类组件多次执行render方法的原因? React15 - React15应用中代码逻辑复用方案 React15 - React状态同步问题解决 React15 - React 15 中 React.pureComponent 的使用场景 React15 - React 15应用在页面渲染时会多次执行类组件的render 函数的原因 React15 - React 15 中能用 componetDidUpdate 代替 componentWillReceiveProps 吗? React15 - React 15 生命周期函数详解 React15 - 如何在React 15中实现自定义的事件订阅与发送(例如组件间通信) React15 - React15应用中的事件订阅和发送机制 React15 - CSS中的BEM规范 React15 - React CSS Modules BEM命名实践 React15 - 写sass 样式文件,嵌套的结构好,还是扁平的结构好? React15 - sass 中 @mixin 和 @extend 的区别是什么? React15 - React 15 应用 如何使用Css moudules 方式进行模块化开发 React15 - React15应用Sass使用指南 React15 - React 15 应用如何进行性能优化?
Python 编程 - 字符串(str)
箫笛 · 2026-06-20 · via 博客园 - 箫笛

Python 3 中的字符串(str)是Unicode 字符序列,用于表示文本数据。与 Python 2 不同,Python 3 不再区分 strunicode,所有文本字符串都是 Unicode 原生支持的,这使得处理多语言和特殊符号变得非常自然。下面是关于 Python 3 字符串的全面概览,涵盖创建、操作、格式化、编码等核心内容。


1. 字符串的创建

字符串可以使用单引号、双引号或三引号(多行)定义:

s1 = 'Hello'
s2 = "World"
s3 = '''多行
字符串'''
s4 = """也可用双引号"""

三引号会保留内部的换行和缩进。


2. 转义字符与原始字符串

反斜杠 \ 用于转义特殊字符(如 \n 换行,\t 制表符)。若希望字符串原样输出(例如文件路径、正则表达式),可使用原始字符串,前缀为 r

path = r'C:\Users\name'   # 反斜杠不被转义

3. 字符串是不可变的

字符串一旦创建,不能修改其中的单个字符。任何看似“修改”的操作(如拼接、替换)都会生成新的字符串对象,这在性能和内存方面需要注意。


4. 基本操作

  • 索引s[0] 获取第一个字符,s[-1] 获取最后一个。
  • 切片s[start:end:step] 返回子串(包含 start,不包含 end)。
  • 拼接+' '.join(list)(推荐用 join 拼接多个片段,效率更高)。
  • 重复s * 3
  • 成员检查'a' in s'abc' not in s
  • 长度len(s)

5. 常用方法

Python 字符串提供了丰富的方法,所有方法都返回新字符串(因为不可变):

  • 大小写转换.upper(), .lower(), .capitalize(), .title(), .swapcase()
  • 去除空白.strip()(两侧)、.lstrip().rstrip()
  • 查找与替换.find(sub), .index(sub), .replace(old, new), .count(sub)
  • 条件判断.isalpha(), .isdigit(), .isalnum(), .isspace(), .startswith(prefix), .endswith(suffix)
  • 分割与合并.split(sep) → 列表,.join(iterable) → 字符串(高效拼接)
  • 对齐与填充.center(width), .ljust(), .rjust(), .zfill(width)

示例:

text = "  Hello, World!  "
print(text.strip())          # "Hello, World!"
print(text.split(','))       # ['  Hello', ' World!  ']
print('-'.join(['a','b']))  # 'a-b'

6. 字符串格式化

Python 3 支持多种格式化方式:

  • % 格式化(旧式):

    "Hello, %s!" % "Alice"          # "Hello, Alice!"
    "Age: %d" % 25                  # "Age: 25"
    
  • .format() 方法(推荐在 3.6 之前):

    "Hello, {}!".format("Bob")                # 位置参数
    "Name: {name}, Age: {age}".format(name="Eve", age=30)  # 关键字参数
    
  • f-string(格式化字符串字面量)(Python 3.6+,最推荐):
    在字符串前加 f,直接使用花括号嵌入变量或表达式:

    name = "Charlie"
    age = 28
    print(f"Name: {name}, Age: {age}, Next year: {age+1}")
    

7. 编码与解码(bytesstr 的转换)

  • 字符串在内存中以 Unicode 码点存储,但传输或存储时需要编码为字节序列(如 UTF-8, GBK)。
  • 编码str.encode(encoding='utf-8') → 返回 bytes 对象。
  • 解码bytes.decode(encoding='utf-8') → 返回 str
s = "中文"
b = s.encode('utf-8')      # b'\xe4\xb8\xad\xe6\x96\x87'
s2 = b.decode('utf-8')     # "中文"

Python 3 默认使用 UTF-8 编码,但最好明确指定。


8. Python 2 vs Python 3 的关键区别

  • Python 2 有 str(字节串)和 unicode(文本串),Python 3 统一为 str(Unicode)。
  • Python 2 中 '中' 是字节串,需加 u 前缀表示 Unicode;Python 3 中普通字符串就是 Unicode。
  • Python 3 的 open() 默认以文本模式读写,自动进行编码转换(可通过 encoding 参数控制)。

9. 高级注意事项

  • Unicode 规范化:有些字符(如 é)可由单个码点或组合字符表示,使用 unicodedata.normalize() 可统一形式,便于比较。
  • 字符长度len(s) 返回 Unicode 码点个数,不是字节数。若需要字节长度,需先编码。
  • 内存与性能:由于不可变性,大量字符串拼接会产生临时对象,建议使用 joinio.StringIO
  • 转义 Unicode:可以用 \uXXXX\UXXXXXXXX 表示任意 Unicode 字符。

10. 总结

Python 3 的字符串是强大且易用的 Unicode 文本容器,结合丰富的内置方法和现代格式化工具(f-string),让文本处理变得高效、清晰。理解其不可变性和编码机制是避免常见陷阱的关键。