""" 内置高阶函数:filter map max min sorted 介绍 """ class Student: """ 学生类:具有name,sex,age,score属性 """ __slots__ = ["__name", "__sex", "__age", "__score"] def __init__(self, name, sex, age, score): self.name = name self.sex = sex self.age = age self.score = score @property def name(self): return self.__name @name.setter def name(self, name): if isinstance(name, str): self.__name = name else: raise TypeError("name is a instrance of class str") @property def sex(self): return self.__sex @sex.setter def sex(self, sex): if isinstance(sex, str): sex = sex.lower() if sex in ["f", "m", "male", "female"]: if sex in ["f", "female"]: self.__sex = "female" else: self.__sex = "male" return raise ValueError("sex should be in [f , m , male, female]") @property def age(self): return self.__age @age.setter def age(self, age): if isinstance(age, int) and 6 <= age <= 18: self.__age = age else: raise ValueError("age should be a integer between 6 and 18") @property def score(self): return self.__score @score.setter def score(self, score): if isinstance(score, int) and 0 <= score <= 100: self.__score = score else: raise ValueError("score should be a integer between 0 and 100") def __str__(self): return "姓名:%s 性别:%s 年龄:%d 分数:%d" % (self.name, self.sex, self.age, self.score) # 测试代码 if __name__ == "__main__": stulist = [Student("张三", "m", 15, 70), Student("李四", "M", 16, 91), Student("王五", "F", 13, 88), Student("赵六", "F", 18, 86)] # filter根据条件筛选可迭代对象中满足条件的元素,返回新的可迭代对象 # 获取所有性别位男的学生信息 ret = filter(lambda student: student.sex == "male", stulist) for student in ret: print(student) print("*" * 20) # map使用可迭代对象中每个元素去调用函数,将返回值作为新的可迭代对象中的元素 # 获取所有学生姓名,返回一个生成器 ret = map(lambda student: student.name, stulist) print(ret) print("所有学生姓名:", end=" ") for name in ret: print(name, end=" ") print() print("*" * 20) # max根据函数进行筛选,返回满足条件的对象 max(可迭代对象, key=筛选函数) # 获取成绩最高的学生对象 student = max(stulist, key=lambda stud: stud.score) print("成绩最高的学生信息:", student) print("*" * 20) # min # 获取年龄最小的学生对象 student = min(stulist, key=lambda stud: stud.age) print("年龄最小的学生信息:", student) print("*" * 20) # sorted(可迭代对象,key=筛选函数) # 根据学生年龄排序,升序排列 sorted_list = sorted(stulist, key=lambda stud: stud.age) for stud in sorted_list: print(stud) print("*" * 20) # 根据学生成绩降序排列 sorted_list = sorted(stulist, key=lambda stud: stud.score, reverse=True) for stud in sorted_list: print(stud)