查看: 121|回复: 1

Python字符串str创建方式详解:六种方法与性能优化指南

[复制链接]
发表于 2 小时前 | 显示全部楼层 |阅读模式
在Python开发中,字符串是最常用的数据类型之一。无论是处理用户输入、解析JSON、读写文件还是构建正则表达式,都离不开字符串。掌握其创建方式不仅能让代码更简洁,还能在循环拼接等场景下显著提升性能。本文将系统梳理Python字符串的六种创建方式、核心特性、编码解码及性能注意事项,并提供完整的代码示例。

一、六种创建字符串的方式

1.1 单引号与双引号
单引号和双引号在Python中完全等价,选择哪一种主要看字符串内部是否包含对应符号。例如,字符串中包含单引号时,使用双引号包裹可省去转义:
  1. text = "I'm a developer"  # 无需转义
  2. quote = '他说:"Python很有趣!"'  # 双引号在字符串内部无需转义
复制代码
项目中建议保持一致风格,若字符串中同时出现单双引号,可用三引号或转义处理。

1.2 三引号(多行字符串)
三引号(''' 或 """)主要用于保留换行格式的多行文本,也常用于函数和类的文档字符串(docstring)。
  1. poem = """静夜思
  2. 床前明月光,
  3. 疑是地上霜。"""
  4. print(poem)  # 输出保留换行
复制代码
注意:三引号内的换行符会原样保留,若不需要换行可在一行内使用。

1.3 str() 构造函数
str() 可将数字、布尔值、列表、字典等任意对象转换为字符串。对于自定义类,可定义 __str__ 和 __repr__ 方法控制其字符串表示:
  1. class Person:
  2.     def __init__(self, name, age):
  3.         self.name = name
  4.         self.age = age
  5.     def __str__(self):
  6.         return f'{self.name}({self.age}岁)'
  7.     def __repr__(self):
  8.         return f"Person('{self.name}', {self.age})"
  9. p = Person('小明', 25)
  10. print(str(p))   # 小明(25岁)
  11. print(repr(p))  # Person('小明', 25)
复制代码

1.4 原始字符串(r-string)
在字符串前加 r 或 R 可关闭反斜杠转义,非常适合编写正则表达式和Windows路径:
  1. path = r"C:\Users\小明\Documents"  # 一个反斜杠即可
  2. import re
  3. pattern = r'\d{3}-\d{4}-\d{4}'   # 匹配电话号码
复制代码
但注意:原始字符串末尾不能是单个反斜杠,否则会引发语法错误。

1.5 f-string(格式化字符串)
自Python 3.6起,f-string成为最推荐的格式化方式,支持内嵌表达式、方法调用、数字格式化及Python 3.8+的调试模式:
  1. name = '小明'
  2. print(f'明年{age+1}岁')           # 表达式求值
  3. print(f'π≈{3.14159:.2f}')        # 保留两位小数
  4. print(f'{name=}')                # Python 3.8+ 输出 name='小明'
复制代码

二、字符串的核心特性

2.1 不可变性
字符串一旦创建便无法修改,所有看似修改的操作(如索引赋值)都会返回新字符串。例如:
  1. s = 'Pithon'
  2. # s[1] = 'y'  # TypeError!
  3. s = s[:1] + 'y' + s[2:]  # 正确做法,生成新字符串
复制代码

2.2 有序序列与Unicode支持
字符串按索引访问,支持切片和遍历。Python 3字符串原生使用Unicode,支持中文、日文、Emoji:
  1. text = '你好'
  2. print(ord('中'))  # 获取Unicode码点 20013
  3. print(chr(128013))  # 🐍
复制代码

三、转义字符与Unicode转义
常用转义包括 \n(换行)、\t(制表)、\\(反斜杠)、\'、\"。Unicode转义使用 \u(16位)和 \U(32位):
  1. print('\u4e2d\u6587')  # 中文(Unicode码点)
  2. print('\U0001f40d')    # 🐍
复制代码

四、字符串拼接与性能优化

4.1 基本拼接
使用 + 拼接少量字符串方便快捷,但会因不可变性产生新对象。* 运算符可重复字符串:
  1. print('-' * 20)  # 分隔线
复制代码

4.2 隐式拼接
相邻的字符串字面量自动拼接,适用于拆解长字符串:
  1. long_text = ('一行很长的字符串'
  2.              '被分成多行书写')
复制代码

4.3 join() 方法:高性能拼接
当拼接大量字符串(如循环生成列表)时,join() 只需一次内存分配,速度远超 + 拼接。以下对比演示了性能差异:
  1. import time
  2. words = ['hello'] * 10000
  3. # 低效的+拼接
  4. start = time.perf_counter()
  5. result = ''
  6. for w in words:
  7.     result += w
  8. print('+拼接耗时:', time.perf_counter()-start)
  9. # 高效的join
  10. start = time.perf_counter()
  11. result = ''.join(words)
  12. print('join耗时:', time.perf_counter()-start)
复制代码
实际测试中,join 可能快上百倍。推荐做法:先用列表收集片段,最后用 join 一次合并。

五、编码与解码

5.1 str 与 bytes 的区别
str 是人类可读的Unicode文本;bytes 是原始字节序列。转换使用 encode / decode:
  1. text = '你好,Python!'
  2. b = text.encode('utf-8')   # str→bytes
  3. s = b.decode('utf-8')      # bytes→str
复制代码

5.2 常见编码格式
UTF-8 是通用标准;GBK 在中文Windows环境常见但跨平台兼容性较差。文件操作时要显式指定编码:
  1. with open('output.txt', 'w', encoding='utf-8') as f:
  2.     f.write('中文内容')
复制代码

六、字符串类型判断
Python 提供了丰富的判断方法(isalpha、isdigit、isalnum、isupper 等),适用于输入校验:
  1. def validate_password(pwd):
  2.     if len(pwd) < 8:
  3.         return False, '密码至少8位'
  4.     if not any(c.isupper() for c in pwd):
  5.         return False, '密码需包含大写字母'
  6.     if not any(c.isdigit() for c in pwd):
  7.         return False, '密码需包含数字'
  8.     return True, '密码合格'
复制代码

七、总结
Python 字符串创建灵活多样:单/双引号适合短文本,三引号处理多行文档,str() 实现类型转换,r-string 简化正则与路径,f-string 让格式化更加直观。牢记字符串不可变性,大量拼接时使用 join() 避免性能陷阱。理解编码解码原理能有效预防乱码。掌握这些基础,将为文本处理和后续进阶打下坚实基础。
回复

使用道具 举报

发表于 1 小时前 | 显示全部楼层

Re: Python字符串str创建方式详解:六种方法与性能优化指南

楼主总结得非常全面,六种创建方式在实际开发中各有妙用。尤其赞同 f-string 的调试模式(`f'{name=}'`)从 3.8 引入后排查变量值非常方便,再也不用写 `print('name =', name)` 了。另外原始字符串末尾不能是单个反斜杠这个坑,确实容易忽略,感谢提醒。join vs 循环拼接的性能对比我也实测过,数据量大时差距惊人,现在习惯先用列表收集再用 join 一把梭。整体内容清晰实用,对新手和老手都有参考价值。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

指导单位

江苏省公安厅

江苏省通信管理局

浙江省台州刑侦支队

DEFCON GROUP 86025

Hacking Group 021A

旗下站点

态势感知中心

应急响应中心

红盟安全

联系我们

官方QQ群:112851260

官方邮箱:security#ihonker.org(#改成@)

官方核心成员

关注微信公众号

Archiver|手机版|小黑屋| ( 沪ICP备2021026908号 )

GMT+8, 2026-6-10 12:04 , Processed in 0.027400 second(s), 18 queries , Gzip On, Redis On.

Powered by ihonker.com

Copyright © 2015-现在.

  • 返回顶部