本篇文章为大家展示了怎么理解Python的函数式编程,代码简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。
函数式编程就是一种抽象程度很高的编程范式,纯粹的函数式编程语言编写的函数没有变量,因此,任意一个函数,只要输入是确定的,输出就是确定的,这种纯函数我们称之为没有副作用。函数式编程的一个特点就是,允许函数接收函数作为参数,也允许把函数作为返回值返回.Python对于函数式编程提供部分支持。由于Python允许使用变量,因此Python不是纯函数式编程语言。
<强>高阶函数强>
所谓高阶函数,就是允许函数的参数接收其他函数下面介绍几个Python内置的高阶函数:
地图()()函数接收两个参数,一个序列,一个函数。地图()的作用就是把传入的函数依次作用于序列的元素,然后把结果作为一个迭代器返回。
def 函数(x):, return x *, x =r 地图(函数[1、2、3、4、5)), 打印(& # 39;map 结果:& # 39;,列表(r)),//运行结果://map 结果:,(1,4,9日,16日,25)
减少()()也接收两个参数,一个函数,一个序列;减少()也把函数作用在序列上,但是这个函数必须接收两个参数,减少把结果继续和系列的下一个元素做累计计算。
得到functools import 减少 ,def function1 (x, y):, return x  +, y 减少(function1 (1、2、3、4、5)), 打印(& # 39;reduce 结果:& # 39;,减少(function1, [1、2、3、4、5))),//运行结果: 结果://reduce 15 ()
过滤器过滤()的功能是过滤序列跟地图()类似,过滤器也接收一个函数一个序列过滤器把函数作用于序列的每一个元素,根据函数返回的真实或者错误的决定元素的保留还是去掉
def isOdd (x):, return x %, 2,==, 1, 时间=p 列表(过滤器(isOdd, [1、2、3、4、5))), 打印(& # 39;filter 结果:& # 39;,p),//运行结果: 结果://filter [1,, 3,, 5]
排序()顾名思义,排序()的功能就是对序列进行排序排序也是一个高阶函数,可以接受一个关键函数。key指定的函数将作用于列表的每个元素上,并根据关键函数返回的结果进行排序。
arr =,(23日0,-13,46岁,85年,-70年),, 打印(& # 39;排序(arr) 排序(arr)), #排序(arr):,(-70,, -13,, 0,, 23岁,45岁,46岁,85年), 打印(& # 39;排序(arr关键=abs): & # 39; 排序(加勒比海盗、关键=abs)), 打印(& # 39;排序(arr关键=abs,反向=True) & # 39; 排序(加勒比海盗、关键=abs、反向=True)),//运行结果://排序(arr关键=abs):,[0,, -13年,23岁,45岁,46岁,-70年,85年),//排序(加勒比海盗、关键=abs、反向=True),(85,, -70,, 46岁,45岁,23岁,-13年,0]
<强>返回函数强>
,高阶函数不仅能接受函数作为参数,还能把函数作为返回值返回。
def lazy_sum (* args):, def 和(): ax =, 0, for n 拷贝参数: +=ax ax n return ax return sum 时间=f lazy_sum (1、2、3、4、5), 打印(f), 打印(& # 39;f ()=& # 39;, f ()),//运行结果://.sum at 0 x109c85950>,//f ()=, 15, #运行结果表明,当我们调用lazy_sum的时候并不直接返回计算结果,而是返回和函数,当我们执行f()的时候才会计算结果*
<强>匿名函数强>
,有些时候我们传入一个函数作为参数的时候,不必要每次都对他进行显性的定义,python提供λ创建匿名函数匿名函数有一个现在就是只能有一个表达式,不用写回报,表达式的结果就是返回值匿名函数没有名字所以不存在函数名冲突的问题,使用匿名函数利于减少代码,这与python倡导理念也是一致的。
s =,减少(lambda x, y: x + y (1、2、3、4、5)), 打印(& # 39;s=& # 39;, s),//运行结果: 15//s=,
<强>偏函数强>
我理解的偏函数的功能是这样的:
假如你有一个这样的函数:它的功能就是对人打招呼
def sayHello(名称、打招呼):, 打印(问候、名称)
假设接下来你要对名字是& # 39;小明# 39;这个人,用一百种方式跟他打招呼。如果你知道默认参数,那么你肯定会想到用它,当然没错,但是考虑到每次传入实在是太麻烦了,所以: