编程思想又叫编程范式
过程就是流程,即做事的步骤:先干什么、再干什么、最后干什么……流水线式的设计
优点:将复杂的问题流程化,进而简单化
缺点:拓展性非常差,一个地方需要修改的时候,全部代码都要进行修改
应用场景:面向过程的程序设计一般用于那些功能一旦实现之后就很少需要改变的场景, 如果你只是写一些简单的脚本,去做一些一次性任务,用面向过程去实现是极好的,但如果你要处理的任务是复杂的,且需要不断迭代和维护, 那还是用面向对象最为方便。
函数式编程并非用函数编程这么简单,而是将计算机的运算视为数学意义上的运算,比起面向过程,函数式更加注重的是执行结果而非执行的过程,代表语言有:Haskell、Erlang。
python并不是一门函数式编程语言,但是仍为我们提供了很多函数式编程的好的特性,如lambda,map,reduce,filter
匿名函数lambda
之前学习的函数都是在函数定义的时候就将函数名称确定了,为了精简,产生了匿名函数
# 定义格式: lambda:函数参数,函数返回值 # 调用格式:第一种 (lambda x,y:x+y)(1,2) # 第二种 func=lambda x,y:x+y——》func(1,2) # 但是两种方式都不怎么用,一般都是放在函数中作为参数,也就是与其他函数配合使用(没有名字,用完一次就丢,不然就成了内存垃圾) salaries={ 'siry':3000, 'tom':7000, 'lili':10000, 'jack':2000 } # 找出薪资最高的人 max=(salaries,key=lambda k:salaries[k] ) # 前面的是迭代的对象,后面的是对迭代对象个进行的操作,简单的说就是将每个元素进行key指定的操作之后再取最大值 # 相同的函数操作还有:min(),map(),filter(),reduce() sorted(salaries,key=lambda k:salaries[k]) # 排序,默认从小到大 sorted(salaries,key=lambda k:salaries[k],reverse=True) # reverse参数就是将从小到大的排列变成从大到小 map(lambda name:name+'挣钱啊' ,salaries) # 映射函数map(函数,可迭代对象)将得到的结果作为返回值,python3结果返回一个生成式,python2返回一个列表 filter(lambda name:name.endswith('y'),salaries) # 返回迭代器 # reduce from functools import reduce # reduce(函数,可迭代对象,初始值) l=[1,2,3] reduce(lambdax,y:x+y,l,10) # 工作原理就是将初始值按照函数的功能与元素相加,先算10+1,得到11再加2,得到13再加3得到16,初始值可以不写
上面的都是典型的函数式编程的函数