面向过程式和函数式编程
# 面向过程式编程
# 介绍
解决问题时,始终思考过程二字,过程即流程,指的做事的步骤:先什么,再什么,后什么
基于该思想编写程序就好比在设计一条流水线,先想好流程,然后再进行编程。
# 优点
复杂的问题拆分成一个个小问题,进而流程化、简单化。
# 缺点
耦合性弱,扩展性差,只能针对目前问题进行解决,可能无法直接拿到其他地方用。
当对某一阶段进行修改,那么其他与他有关的阶段,可能也需要跟着进行修改。
# 使用场景
不需要频繁更迭,应用场景相对固定:比如脚本文件、数据分析程序、特定功能等等。
即便一个软件需要更迭,也并不代表这个软件的所有部分都需要一起更迭。
# 函数式编程
# 介绍
函数式更加注重的是执行结果,而非执行的过程。它更加复杂,可读性差且维护性差,但是结果更加准确。
python并非函数式编程语言,但保留了一些符合python哲学思想的函数式编程的特性。
如:lambda、map、reduce、filter
# 有名函数
即是用def定义的函数。
def 函数名(参数):
函数体
return
1
2
3
2
3
# 匿名函数
没有名字的函数。用于临时调用一次的场景,更多的是将匿名函数与其他函数配合使用的场景。用完后引用计数为0,会被当垃圾回收掉。
我们可以使用lambda关键字定义匿名函数。
# lambda
lambda 形参:表达式
会将函数体表达式的结果作为返回值返回。
例如:
lambda x,y:x+y
# 使用方式一 (正确用法)
为某一个函数应用一次,将匿名函数对象传入函数,等函数调用完就销毁该匿名函数。
如max()函数,如果要迭代字典的值,就需要指定一个函数,max函数会将字典的键名作为参数传递给指定的函数,然后将返回值作为比较的依据。
dic1 = {'a':123,'b':321,'c':112}
ret = max(dic1,key=lambda k:dic1[k])
print(ret)
1
2
3
2
3
# 使用方式二 (有时会用)
(lambda 形参:函数体)(实参)
直接将lambda函数用括号括起,然后直接作为函数对象进行调用。
ret = (lambda x,y:x+y)(1,2)
print(ret)
1
2
2
# 使用方式三 (不使用)
将函数对象赋值给名称再调用,与匿名函数的作用相悖,所以不会使用。
func = lambda 形参:函数体
print(func(1,2))
1
2
2