当前位置: 首页 > news >正文

Python 编程 - 字符串(str)

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),让文本处理变得高效、清晰。理解其不可变性和编码机制是避免常见陷阱的关键。

http://www.gsyq.cn/news/1561418.html

相关文章:

  • 外墙防水选购指南:如何选高性价比服务与靠谱公司 - 速递信息
  • 2026外墙防水领域代表性品牌解析:专业服务选型参考 - 资讯速览
  • Apollo Link REST 实战:构建一个完整的电影搜索应用
  • 如何在Windows 11上完美运行经典老游戏:DDrawCompat兼容性解决方案终极指南
  • 深圳南山泰语培训哪家效果好 - 速递信息
  • 劳力士官方授权售后维修中心正式辟谣|2026年6月最新发布:亨得利全国正规售后服务门店+真实消费者对话记录 - 亨得利官方维修中心
  • 2026年佛山制造业采购经理CPPM培训怎么安排?众智商学院课程内容和费用说明 - 众智商学院官方
  • 深圳福田雅思培训哪家服务好 - 速递信息
  • 微信聊天记录永久保存完整指南:免费工具让数据真正属于你
  • 权威官方公告!萧邦官方售后维修服务网点,售后咨询电话与官方门店完整地址查询 - 速递信息
  • 告别手动分层:用AI智能工具将单张图片秒变专业PSD文件
  • SGNavigationProgress源码解读:从SGProgressView到分类实现的完整架构
  • 嵌入式GUI开发:emWin控件API设计哲学与CHECKBOX、DROPDOWN实战详解
  • 深圳福田越南语培训哪个机构专业 - 速递信息
  • 添价收 2026 西安全域收包 长安未央均可预约上门取件 - 薛定谔的梨花猫
  • 2026 AI应用生存地图:工作流切片法实战指南
  • 2026读懂广州企业合规避坑要点|执业律师专业解读,本地律师事务所服务选型参考 - 速递信息
  • 【实战】多模型编程时代已至:Codex+Claude+Gemini 组合拳实战,让 AI 替你写代码
  • 2026南宁奢侈品回收行业白皮书:名牌包闲置落灰贬值!本地门店回收,当场全款结算不拖沓 - 讯息早知道
  • 2026国内CTP制版机推荐型号:印刷企业怎么选?高性价比首选爱司凯这些型号 - 速递信息
  • LoadPE 代码实现部分(ASM汇编版本)>>04
  • 嵌入式GUI开发实战:emWin多触点与指针输入设备驱动与手势应用详解
  • 2026年最新!青海青甘大环线旅游网红路线与靠谱公司推荐:青海峰渡阿里将军同款体验测评盘点/全攻略! - 速递信息
  • Python之antennass包语法、参数和实际应用案例
  • 深圳意大利语培训哪家口碑好 - 速递信息
  • 2026 安徽省|中考两三百分想学护理 3+2,全省统一最新简章发布,招生联系方式多少 - 我叫小周
  • 西安GEO公司真实表现,一线观察揭示行业细节 - 速递信息
  • 甘肃农村一氧化碳报警器厂家推荐,一氧化碳厂家电话咨询:185-9427-5329立可安适配西北燃煤取暖环境 - 厂家新闻网
  • 昆明旧金回收完整指南,2026 榜单盘点与线下门店实测汇总 - 讯息早知道
  • 无套路现款秒结,2026哈尔滨回收黄金口碑商家优选榜单 - 名奢变现站