Python 实用技巧:优化类打印、JSON 序列化与列表排序
本文分享 Python 编程中的三个实用技巧。首先,通过重写 __repr__ 方法或使用 __dict__ 属性,将默认的对象内存地址输出转化为更易读的字符串形式。其次,利用 json 模块的 dumps 方法结合对象的 __dict__,快速将自定义类实例序列化为格式化的 JSON 字符串。最后,演示如何使用 lambda 表达式对包含自定义对象的列表进行多级排序,支持按单一字段或组合字段(如先名字后键值)进行升序排列,提升数据处理效率。
本系列文章持续分享 Python 的使用建议与实用技巧,每期精选三个要点,旨在帮助开发者提升编码效率与代码质量。
1 如何生成更易读的类实例字符串
不推荐的做法
class Point(object):
def __init__(self, x, y):
self.x = x
self.y = y
p = Point(3, 4)
print p
# <__main__.Point object at 0x0000000001E1B9E8>
推荐的做法
class Point(object):
def __init__(self, x, y):
self.x = x
self.y = y
def __repr__(self):
return 'Point({self.x}, {self.y})'.format(self=self)
p = Point(3, 4)
print p
# Point(3, 4)
默认情况下,直接打印类实例仅显示内存地址,难以获取具体信息。可以通过定义类的 __repr__ 方法来定制打印输出,使其更具可读性。若不想定义该方法,也可以直接调用对象的 __dict__ 属性以字典形式展示内容,这种方式同样清晰易读。
print p.__dict__
# {'y': 4, 'x': 3}
利用 __dict__ 属性可以将类的内部状态以字典格式输出,便于直观查看各属性值。
2 如何将类实例转换为 JSON 字符串
import json
class User(object):
def __init__(self, name, id):
self.name = name
self.id = id
u = User('user1', 1)
print json.dumps(u.__dict__, indent=4)
'''
{
"name": "user1",
"id": 1
}
'''
借助 json 模块提供的 dumps 函数,可以便捷地将类实例的属性字典序列化为标准的 JSON 字符串。
3 如何对包含类的列表进行排序
class User:
def __init__(self, name, key):
self.name = name
self.key = key
def __repr__(self):
return 'User({self.name}, {self.key})'.format(self=self)
user_list = [
User('user1', 3),
User('user2', 2),
User('user3', 1),
]
print sorted(user_list, key=lambda user: user.key)
# [User(user3, 1), User(user2, 2), User(user1, 3)]
print sorted(user_list, key=lambda user: user.name)
# [User(user1, 3), User(user2, 2), User(user3, 1)]
此类列表的排序逻辑与字典排序类似。示例中展示了两种排序方式:一是按 user 的 key 字段升序排列,二是按 name 字段升序排列。此外,还支持在名字相同的情况下,进一步依据 key 进行二级排序,具体实现如下所示。
user_list = [
User('user1', 3),
User('user1', 2),
User('user1', 1),
]
print sorted(user_list, key=lambda user: (user.name, user.key))
# [User(user1, 1), User(user1, 2), User(user1, 3)]
以上即为 Python 使用建议与技巧分享(四)的全部内容,更多关于 Python 建议与技巧的资料请关注本站其它相关文章!
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













