核心思想
所谓函数式编程,就是使用一系列的函数解决问题的编程思想。在此基础上,有以下三个条件,方满足函数式编程:
1、函数可以赋值给变量,赋值后的变量绑定函数
2、允许将函数作为参数传入另一个函数
3、允许函数返回一个函数
例:
定义一个学生类,查找指定条件的学生
class StudentModle: #学生类
def __init__(self, name, age, score):
self.name = name
self.age = age
self.score = score
def __repr__(self):
return "%s--%d--%d" % (self.name, self.age, self.score)
比如查找学生中年龄大于25岁的学生,编写如下查找方法。
def find_all(list_target):
for item in list_target:
if item.age > 25:
yield item
方法中:list_target为学生列表,遍历学生列表,将满足条件的学生通过yield关键字逐个输出。创建学生列表,输出结果。
list01 = [StudentModle('zs', 20, 92),
StudentModle('ls', 25, 90),
StudentModle('ww', 26, 50),
StudentModle('zl', 20, 100)]
stu = find_all(list01)
for item in stu:
print(item)
#结果如下
StudentModle('ls', 25, 90)
StudentModle('ww', 26, 50)
同理,如果查找成绩大于90的学生,方法同上,只要改变条件为: if item.score > 90,即可实现该功能。
由此可见,同样类似于这样的查找完全可以提炼为一个通用的方法进行调用,不仅适用于查找学生,任意同类型的查找皆可满足,只需要运用函数式编程思想,将变化的部分整合为一个函数,代码如下:
def find_all(list_target, func_condition):
for item in list_target:
if func_condition(item):
yield item
fun_condition为函数,在函数find_all中作为参数传入,在if条件后作为条件使用,这里使用lambda方法美化程序,还是查找年龄大于25岁的学生,实例如下:
list01 = [StudentModle('zs', 20, 92),
StudentModle('ls', 25, 90),
StudentModle('ww', 26, 50),
StudentModle('zl', 20, 100)]
for item in find_all(list01,lambda stu:stu.age > 25):
print(item)
# 输出如下
StudentModle('ls', 25, 90)
StudentModle('ww', 26, 50)
在面向对象的大环境下,这样通用的方法适用范围很广,函数式编程的思想在实际运用中能够有效地提高开发效率。