Python 高阶函数获取命名属性,下面来看稍微不同的数据集合。假设这里使用的是NamedTuple
的子类而非匿名元组对象。首先定义一个类,它为元组中的两项提供了以下类型提示。
from typing import NamedTuple
class YearCheese(NamedTuple):
year: int
cheese: float
随后将基础数据year_cheese
转换为合适的命名元组。转换过程如下所示:
>>> year_cheese_2 = list(YearCheese(*yc) for yc in year_cheese)
>>> year_cheese_2
[YearCheese(year=2000, cheese=29.87),
YearCheese(year=2001, cheese=30.12),
YearCheese(year=2002, cheese=30.6),
YearCheese(year=2003, cheese=30.66),
YearCheese(year=2004, cheese=31.33),
YearCheese(year=2005, cheese=32.62),
YearCheese(year=2006, cheese=32.73),
YearCheese(year=2007, cheese=33.5),
YearCheese(year=2008, cheese=32.84),
YearCheese(year=2009, cheese=33.02),
YearCheese(year=2010, cheese=32.92)]
有两种方法来确定奶酪消耗量的范围,可以如下所示使用attrgetter()
函数,或者使用匿名函数形式。
>>> from operator import attrgetter
>>> min(year_cheese_2, key=attrgetter('cheese'))
YearCheese(year=2000, cheese=29.87)
>>> max(year_cheese_2, key=lambda x: x.cheese)
YearCheese(year=2007, cheese=33.5)
这里的重点是,对于匿名函数对象,属性名是代码中的一个标记,而对于attrgetter()
函数,属性名是一个字符串。使用字符串的话,属性名会是一个在脚本运行期间可以修改的参数,这会使程序更为灵活。