Python 高阶函数获取命名属性

  • Post category:Python

Python 高阶函数可以接受一个函数作为参数,或者返回一个函数作为结果。使用高阶函数可以使签名简洁,且不需要使用循环、条件语句等控制流结构,让代码更加清晰简洁。在 Python 中,获取对象的属性有两种方式:getattr 和 hasattr。

获取属性函数 getattr 有三个参数,用法如下:

getattr(object, name[, default])

其中 object 表示要获取属性的对象,name 表示要获取的属性名。如果对象中不存在该属性,则可以用 default 参数指定一个默认值,否则会触发 AttributeError 异常。如果不指定 default,默认返回 None。

示例1:获取列表中元素的长度

words = ['cat', 'window', 'defenestrate']
lengths = list(map(lambda x: len(x), words))
print(lengths)

输出:[3, 6, 12]

在上例中,使用了 map 函数遍历列表中的每个元素,传入了一个 lambda 函数作为参数,用于获取元素的长度。map 函数返回的是一个迭代器,使用 list 函数将其转化为列表,然后输出结果。

示例2:根据属性对列表中的字典进行排序

students = [
    {'name': 'Alice', 'age': 21},
    {'name': 'Bob', 'age': 18},
    {'name': 'Charlie', 'age': 20},
    {'name': 'Dave', 'age': 23}
]

sorted_students = sorted(students, key=lambda x: x['name'])
print(sorted_students)

输出:

[
    {'name': 'Alice', 'age': 21},
    {'name': 'Bob', 'age': 18},
    {'name': 'Charlie', 'age': 20},
    {'name': 'Dave', 'age': 23}
]

在上例中,使用了 sorted 函数对列表中的字典进行排序,传入了一个 lambda 函数作为 key 参数,用于指定按照 name 属性进行排序。sorted 函数默认按照升序排序,如果想要按照降序排序,可以指定 reverse 参数为 True。