Python 字符串基础

Python 中的字符串是不可变的序列类型,支持 Unicode 编码,无需手动管理终止符。字符串的声明和初始化非常灵活:

str1 = "Hello"           # 双引号
str2 = 'World'           # 单引号
str3 = """多行
字符串"""                 # 三引号支持多行
str4 = str(123)          # 从其他类型转换
字符串输入与输出

使用内置函数可以方便地进行字符串的输入和输出操作:

name = input("Enter your name: ")  # 获取用户输入
print(f"Hello, {name}!")           # f-string 格式化输出

age = 25
print("Name: {}, Age: {}".format(name, age))  # format 方法
print("Name: %s, Age: %d" % (name, age))      # 百分号格式化(旧式)
常用字符串处理函数/方法

Python 字符串内置了丰富的方法,无需额外导入模块:

str1 = "Hello"
str2 = "World"

# 字符串拼接
str3 = str1 + " " + str2
print(f"str3 after concatenation: {str3}")

# 字符串长度
print(f"Length of str3: {len(str3)}")

# 字符串比较
if str1 == str2:
    print("Strings are equal")
else:
    print("Strings are different")

# 大小写转换
print(str1.upper())      # HELLO
print(str1.lower())      # hello

# 查找子串
print(str3.find("World"))  # 6
print("World" in str3)     # True

# 替换
print(str3.replace("World", "Python"))  # Hello Python

# 去除空白
text = "  spaces  "
print(text.strip())   # "spaces"
字符串与索引/切片

Python 字符串支持索引访问和切片操作,每个字符可通过索引获取:

str_var = "Pointer"

# 索引访问
print(str_var[0])   # P
print(str_var[-1])  # r

# 切片操作
print(str_var[0:3])   # Poi
print(str_var[::2])   # Pitr
print(str_var[::-1])  # retnioP

# 遍历字符串
for char in str_var:
    print(char, end=" ")
print()
字符串列表

处理多个字符串时可以使用列表,更加灵活高效:

# 字符串列表
names1 = ["Alice", "Bob", "Charlie"]

# 元组(不可变序列)
names2 = ("David", "Eve", "Frank")

for i in range(len(names1)):
    print(f"{names1[i]}\t{names2[i]}")

# 列表推导式处理字符串
upper_names = [name.upper() for name in names1]
print(upper_names)  # ['ALICE', 'BOB', 'CHARLIE']
字符串操作示例

字符串分割是一个常见操作,可以使用 split 方法实现:

str_var = "apple,orange,banana"

# 按分隔符分割
tokens = str_var.split(",")
for token in tokens:
    print(token)

# 限制分割次数
print("a,b,c,d".split(",", 2))  # ['a', 'b', 'c,d']

# 多字符分隔符:使用 split() 或正则表达式
import re
text = "apple; orange|banana"
result = re.split(r'[;|]\s*', text)
print(result)  # ['apple', 'orange', 'banana']
安全字符串处理

Python 字符串天然免疫缓冲区溢出问题,但仍需注意编码和注入安全:

# 无需担心长度溢出,但注意内存占用
src = "This string could be very long"
dest = src[:9]  # 安全切片,自动截断
print(f"Truncated string: {dest}")

# 用户输入过滤(防止注入)
user_input = "<script>alert('xss')</script>"
safe_input = user_input.replace("<", "&lt;").replace(">", "&gt;")
print(f"Safe input: {safe_input}")

# 使用模板引擎更安全
from string import Template
t = Template("Hello, $name!")
print(t.safe_substitute(name="World"))
自定义字符串函数

实现自定义的字符串处理函数可以加深对字符串的理解:

def my_strlen(s: str) -> int:
    """自定义字符串长度函数"""
    count = 0
    for _ in s:
        count += 1
    return count

def my_count(s: str, sub: str) -> int:
    """自定义子串计数函数"""
    count = 0
    start = 0
    while True:
        idx = s.find(sub, start)
        if idx == -1:
            break
        count += 1
        start = idx + len(sub)
    return count

test = "Length test test"
print(f"Length: {my_strlen(test)}")
print(f"'test' count: {my_count(test, 'test')}")
性能注意事项

字符串操作在 Python 中需要特别注意性能和内存问题:

  • 避免频繁的字符串拼接:使用 join() 方法替代 + 拼接大量字符串
  • 优先使用列表推导式和生成器表达式处理大量字符串
  • 善用内置方法str 方法通常由 C 实现,效率更高
  • 考虑使用 io.StringIO 处理大量文本流操作
# 高效拼接大量字符串
parts = ["Line " + str(i) for i in range(1000)]
result = "\n".join(parts)  # 比循环 += 高效得多

# 处理大文本时使用生成器
def read_large_file(filepath):
    with open(filepath, 'r', encoding='utf-8') as f:
        for line in f:
            yield line.strip()

以上代码示例涵盖了 Python 3 字符串的主要概念和操作,从基础用法到高级技巧,为开发者提供了全面的参考。

更多推荐