上QQ阅读APP看书,第一时间看更新
2.1.4 排序类定义的实例
在Python程序中,我们可以排序一个类定义的多个实例。使用内置函数sorted()可以接收一个用来传递可调用(callable)对象的参数key,而这个可调用对象会返回待排序对象中的某些值,sorted()函数则利用这些值来比较对象。假设在程序中存在多个User对象的实例,如果想通过属性user_id来对这些实例进行排序,可以提供一个可调用对象,它将User实例作为输入,然后返回user_id。下面的实例文件leishili.py演示了排序上述User对象实例的过程。
源码路径:daima\第2章\leishili.py
class User: def __init__(self, user_id): self.user_id = user_id def __repr__(self): return 'User({})'.format(self.user_id) # 原来的顺序 users = [User(19), User(17), User(18)] print(users) # 根据user_id排序 ①print(sorted(users, key=lambda u: u.user_id)) from operator import attrgetter ②print(sorted(users, key=attrgetter('user_id')))
在上述代码中,在①处使用lambda表达式进行了处理,在②处使用内置函数operator.attrgetter()进行了处理。执行结果如图2-7所示。
图2-7 执行结果