我创建了两个返回排序列表的函数。它们都以包含Employee类实例的列表作为参数。第一个按名称属性排序,第二个按年龄排序,它们都使用lambda函数
class Employee():
allEmployees = []
def __init__(self, name, age):
self.name = name
self.age = age
Employee.allEmployees.append(self)
def sortEmployeesByName(some_list, name):
return sorted(some_list, key=lambda employee: employee.name)
def sortEmployeesByAge(some_list, age):
return sorted(some_list, key=lambda employee: employee.age)
如何才能只创建一个函数sortEmployees
,其中我将属性作为第二个参数传递,同时还使用lambda函数?在
例如
^{pr2}$
使用
operator.attrgeter
。我添加了__repr__
方法来查看示例:印刷品:
^{pr2}$这是另一个使用^{} 的版本。我认为在这里给
Employee
类a.sort
classmethod是有意义的。我从andrejkesely“借用”了__repr__
方法和测试数据。;)输出
^{pr2}$operator.attrgetter
的一个优点是我们可以向它传递多个属性,它将返回一个属性元组。我们可以使用它在一个过程中按多个属性排序。但是我们需要稍微修改.sort
方法。其他代码保持不变。在输出
你想要
operator.attrgetter
,不需要lambdas。这也应该表现得更好:相关问题 更多 >
编程相关推荐