在 Python 中,"tostring" 通常指的是将对象转换为字符串表示的过程,Python 提供了多种方式来实现这一点,具体取决于对象的类型和所需的格式,以下是几种常见的情况和对应的格式化方法:

基本数据类型的 str() 转换
Python 内置的 str() 函数可以将基本数据类型(如整数、浮点数、布尔值等)转换为字符串。
num = 42 str_num = str(num) # '42' pi = 3.14159 str_pi = str(pi) # '3.14159' flag = True str_flag = str(flag) # 'True'
使用 f-strings(格式化字符串字面量,Python 3.6+)
f-strings 是现代 Python 中最推荐的字符串格式化方式,语法简洁且高效。
name = "Alice"
age = 30
formatted_str = f"Name: {name}, Age: {age}" # 'Name: Alice, Age: 30'
# 支持表达式和格式化选项
price = 19.99
formatted_price = f"Price: ${price:.2f}" # 'Price: $19.99'
使用 str.format() 方法
这是 Python 2.6+ 和 3.x 中广泛支持的格式化方法,比 格式化更灵活。
template = "Hello, {}. You are {} years old."
result = template.format("Bob", 25) # 'Hello, Bob. You are 25 years old.'
# 带索引和命名参数
template = "{0} has {1} {items}. {name} owns {items}."
result = template.format("Alice", 3, items="apples", name="Bob")
# 'Alice has 3 apples. Bob owns apples.'
使用 运算符(旧式格式化)
Python 早期版本的字符串格式化方式,现已不推荐在新代码中使用。

name = "Charlie" age = 40 formatted_str = "Name: %s, Age: %d" % (name, age) # 'Name: Charlie, Age: 40'
自定义对象的 __str__ 和 __repr__ 方法
通过定义类的 __str__ 或 __repr__ 方法,可以控制对象转换为字符串时的行为。
__str__:面向用户,可读性强的字符串表示。__repr__:面向开发者, ideally 是能通过eval()重建对象的字符串(如果可能)。
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
def __str__(self):
return f"Person(name={self.name}, age={self.age})"
def __repr__(self):
return f"Person('{self.name}', {self.age})"
p = Person("Dave", 35)
print(p) # 调用 __str__: 'Person(name=Dave, age=35)'
print(repr(p)) # 调用 __repr__: "Person('Dave', 35)"
JSON 序列化(json.dumps)
对于复杂对象(如字典、列表),可以使用 json 模块将其转换为 JSON 格式的字符串。
import json
data = {"name": "Eve", "age": 28, "hobbies": ["reading", "coding"]}
json_str = json.dumps(data) # '{"name": "Eve", "age": 28, "hobbies": ["reading", "coding"]}'
字节串(Bytes)转换为字符串
如果对象是字节串(bytes),需要指定编码(如 UTF-8)来解码为字符串。
byte_data = b"Hello, World!"
str_data = byte_data.decode("utf-8") # 'Hello, World!'
使用 pprint 美化输出
对于嵌套或复杂的数据结构,pprint 模块可以生成更易读的字符串表示。
import pprint
data = {"a": [1, 2, 3], "b": {"x": 10, "y": 20}}
pprint.pprint(data) # 格式化输出到控制台
str_repr = pprint.pformat(data) # 获取格式化后的字符串
| 场景 | 方法 | 示例 |
|---|---|---|
| 基本类型转字符串 | str() |
str(123) → '123' |
| 格式化字符串 | f-strings | f"Value: {x:.2f}" |
| 通用格式化 | str.format() |
"{} is {}".format("A", 1) |
| 旧式格式化 | 运算符 | "Name: %s" % "Alice" |
| 自定义对象字符串 | __str__ / __repr__ |
class MyClass: ... |
| JSON 序列化 | json.dumps() |
json.dumps({"key": "value"}) |
| 字节解码 | .decode() |
b"data".decode("utf-8") |
| 美化复杂结构 | pprint.pformat() |
pprint.pformat([1, 2, {"a": 3}]) |
根据具体需求选择合适的方法,f-strings 和 str.format() 是现代 Python 的首选。
