代码:
"""
内置高阶函数: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)
测试: