pin_drop当前位置:知识文库 ❯ 图文
Python字符串类型详解
概述
字符串(String)是Python中表示文本数据的基本类型,由零个或多个字符组成的有序序列。在Python 3中,字符串默认使用Unicode编码,可以表示世界上几乎所有的文字和符号。字符串是不可变(immutable)对象,一旦创建就不能修改其内容。字符串在数据处理、文本分析、Web开发等领域无处不在,是Python编程中使用最频繁的数据类型之一。
字符串定义
单引号
代码示例
s1 = 'Hello, Python!'
print(s1)
print(type(s1))输出:
代码示例
Hello, Python!
<class 'str'>双引号
代码示例
s2 = "Hello, Python!"
print(s2)输出:
代码示例
Hello, Python!单引号和双引号在Python中完全等价,可以根据需要选择。当字符串中包含引号时,可以使用另一种引号来避免转义:
代码示例
s1 = "It's a beautiful day"
s2 = 'He said "Hello"'三引号
三引号(三个单引号或三个双引号)用于定义多行字符串:
代码示例
s1 = '''这是第一行
这是第二行
这是第三行'''
s2 = """这也是
多行
字符串"""
print(s1)
print("---")
print(s2)输出:
代码示例
这是第一行
这是第二行
这是第三行
---
这也是
多行
字符串三引号字符串会保留所有换行符和缩进,常用于:
多行文本
文档字符串(docstring)
包含单引号和双引号的文本
原始字符串
原始字符串(Raw String)以r或R开头,其中的反斜杠不会被视为转义字符:
代码示例
normal = "C:\\new\\test"
raw = r"C:\new\test"
print(normal)
print(raw)输出:
代码示例
C:
ew\test
C:\new\test原始字符串的用途
原始字符串在正则表达式和文件路径中特别有用:
代码示例
import re
pattern = r"\\d+\\.\\d+"
text = "The price is 3.14"
result = re.search(pattern, text)
print(result.group())输出:
代码示例
3.14提示:原始字符串不能以奇数个反斜杠结尾,因为最后一个反斜杠会转义结尾的引号。
r"hello\\"是语法错误。
转义字符
转义字符以反斜杠\开头,用于表示一些特殊字符:
转义字符示例
代码示例
print("姓名\t年龄\t城市")
print("张三\t25\t北京")
print("---")
print("第一行\n第二行\n第三行")
print("---")
print("路径: C:\\Users\\test")输出:
代码示例
姓名 年龄 城市
张三 25 北京
---
第一行
第二行
第三行
---
路径: C:\Users\test字符串不可变性
字符串是不可变对象,一旦创建就不能修改其中的任何字符:
代码示例
s = "hello"
# s[0] = "H" # TypeError: 'str' object does not support item assignment如果需要修改字符串,必须创建一个新的字符串:
代码示例
s = "hello"
s = "H" + s[1:]
print(s)输出:
代码示例
Hello不可变性的影响
代码示例
a = "hello"
b = "hello"
print(a is b)
a = "hello world"
print(a)
print(b)输出:
代码示例
True
hello world
hello提示:字符串不可变意味着:对字符串的任何"修改"操作实际上都是创建了一个新字符串。这在频繁修改字符串时可能产生性能问题,此时可以考虑使用列表来构建,最后用
''.join()合并。
代码示例
示例1:字符串定义方式对比
代码示例
s1 = '单引号字符串'
s2 = "双引号字符串"
s3 = '''三引号
可以
换行'''
s4 = r"原始字符串\n不转义"
print(f"s1: {s1}")
print(f"s2: {s2}")
print(f"s3: {s3}")
print(f"s4: {s4}")输出:
代码示例
s1: 单引号字符串
s2: 双引号字符串
s3: 三引号
可以
换行
s4: 原始字符串\n不转义示例2:字符串与Unicode
代码示例
chinese = "你好,世界"
emoji = "[笑脸][庆祝]"
print(chinese)
print(emoji)
print(len(chinese))
print(len(emoji))输出:
代码示例
你好,世界
[笑脸][庆祝]
5
2提示:Python 3字符串原生支持Unicode,可以自由使用中文、日文、Emoji等各种字符。注意
len()返回的是字符数,不是字节数。
注意事项
提示:
单引号和双引号在Python中完全等价,选择哪种取决于个人偏好和字符串内容。
三引号字符串会保留所有空白字符(换行、缩进等),注意可能引入多余的空格。
原始字符串不能以奇数个反斜杠结尾。
字符串是不可变对象,"修改"操作实际上是创建新字符串。
Python 3字符串是Unicode字符串,
len()返回字符数而非字节数。空字符串
""和''都是合法的,其布尔值为False。字符串拼接时,使用
+运算符或join()方法,后者在大量拼接时性能更好。
小结
本节介绍了Python字符串类型的核心知识:
字符串可以使用单引号、双引号或三引号定义
三引号用于多行字符串,会保留换行和缩进
原始字符串
r""中的反斜杠不转义,常用于正则和路径转义字符用于表示特殊字符,如
\n换行、\t制表符等字符串是不可变对象,修改操作会创建新字符串
Python 3字符串原生支持Unicode
练习题
练习1
编写一个程序,使用三引号定义一首古诗(至少4行),并输出该古诗及其总字符数(不含换行符)。
提示:使用replace()方法去除换行符后再用len()计算字符数。
练习2
编写一个程序,分别用普通字符串和原始字符串表示正则表达式模式\d{3}-\d{4},并打印两者,观察区别。
提示:普通字符串中\\d表示\d,原始字符串中直接写\d。
常见问题
Python中单引号和双引号有什么区别?
在Python中,单引号和双引号完全等价,没有任何功能差异。选择哪种主要取决于字符串内容和个人偏好。当字符串中包含单引号时可以使用双引号包裹,反之亦然,这样可以避免使用转义字符。
为什么字符串是不可变的?这有什么好处?
字符串不可变性使得字符串可以被安全地共享和缓存(字符串驻留),相同的字符串值在内存中只存储一份。这提高了内存效率,也使字符串可以作为字典的键。不可变对象天生是线程安全的。
什么时候使用原始字符串?
原始字符串主要用于两个场景:正则表达式(避免大量转义反斜杠)和Windows文件路径(如r"C:\Users\name")。使用原始字符串可以让代码更清晰,减少转义字符带来的混淆。
大量字符串拼接时如何提高性能?
由于字符串不可变,使用+运算符拼接会产生大量中间对象。大量拼接时应使用列表收集各部分,最后用''.join()一次性合并;或使用io.StringIO;或使用f-string格式化,这三种方式性能远优于反复使用+号拼接。
本文涉及AI创作
内容由AI创作,请仔细甄别