Loading

函数式编程

  • 函数式编程简介

函数是一等公民,其与其他数据类型处于同等地位,可以作为函数的参数(也包括了嵌套和递归)等等

(将所有的操作都函数化,输入经过函数得到输出,也就是输入经过操作获得了输出)

只是用表达式,而不是用语句。前者拥有返回值,而后者没有

没有副作用,即函数保持独立,所有的功能就是返回一个值,没有其他行为,尤其是不能修改外部变量的值

不修改状态,只是返回新的值,而不去改变系统变量

引用透明,不依赖于外部变量或者状态,只依赖输入的参数(这是函数唯一的IO),只要参数相同,返回值总是相同的

(单入口输入,单出口输出,单入口指的是只从传入参数的位置进行IO,单出口指的是只从返回值的位置进行IO)

因此

代码可以大量重用

函数的命名可以使其更容易理解

每个函数可以看作独立的单元,易于模块化组合

可以使用多线程运行,因为其相互独立,所以不用考虑锁的问题

  • python的函数式编程

基本函数:map()(批量计算可迭代对象),reduce()(累积计算可迭代对象),filter()(按照条件对可迭代对象进行过滤)

算子:lambda(用于计算)

  • 替换if/else进行条件控制

使用一个匿名函数作为输入参数

此处使用了短路处理,在or中,发现一个true,则会直接返回true,在and中,发现一个false,则会直接返回false

而在and中,发现第一个true,则会返回第二个项的值

or保证了其验证所有条件(if和else),and保证了达到条件之后运行(if和之后的代码块)

pr = lambda s:s
print_num = lambda x: (x==1 and pr("one")) \
                   or (x==2 and pr("two")) \
                   or (pr("other"))
print_num(1)
# 'one'
print_num(2)
# 'two'
print_num(3)
# 'other'
  •  替代for进行循环控制

 使用map()函数即可,其会返回结果的迭代器

square = lambda x : x * x
for x in [1,2,3,4,5]: square(x)
# 1
# 4
# 9
# 16
# 25
map(square, [1,2,3,4,5])
# [1, 4, 9, 16, 25]

 

posted @ 2020-10-27 23:37  lixin2020  阅读(96)  评论(0)    收藏  举报