例:
去除小写字母
s=filter(lambda x:not str(x).islower(),"asdasfAsfBsdfC")
for ch in s:
print(ch)
map函数接受的参数类型与filter类似 , 它用于把函数作用于可遍历对象的每一个元素 。类似于数学中映射的概念 。
例:
求y=2x+1(偷偷用了一下range函数生成定义域)
s=map(lambda x:2*x+1,range(6))
for x in s:
print(x)
reduce函数对每个元素作累计操作 , 它接受的第一个参数必须是有两个参数的函数 。
例:
求和
from functools import reduce
s=reduce(lambda x,y:x+y,range(1,6))
print(s)
求乘积(第三个可选参数表示累计变量的初值)
from functools import reduce
s=reduce(lambda x,y:x*y,range(1,6),1)
print(s)
柯里化(curry)函数
如果一个函数需要2个参数,而你只传入一个参数 , 那么你就可以得到一个柯里化的函数,这是函数式编程语言的重要特性之一,遗憾的是,python并不能在语法层面支持柯里化调用,但它在库中提供了接口 。
例:
*3函数
f_mul=lambda x,y:x*y
from functools import partial
【Python函数柯里化 python化简函数】mul3=partial(f_mul,3)
print(mul3(1))
print(mul3(6))
打包与解包
有点类似于函数式中的模式匹配,略牵强 。
t=(1,2,3)
x,y,z=t
列表生成式
这个也有点牵强,不知道严格意义上讲属不属于函数式风格 。
例:生成奇数序列
l=[2*x+1 for x in range(10)]
for i in l:
print(i)
最后来一个彩蛋(以前某答主提到的用调分函数来美颜的算法,忘了出处了,侵删)
from PIL import Image
from math import sqrt
im = Image.open("a.jpg")
ret= im.convert(mode="RGB")
ret = ret.point(lambda x:sqrt(x)*sqrt(255))
ret.save("b.jpg")
函数柯里化与不定参数处理答案
首先函数柯里化因为参数固定,使用vars数组保存每次传进来的参数,然后判断fn的参数个数,如果fn参数个数正好等于vars数组中保存的个数,那么执行fn,否则递归一次,返回curried函数,继续等待输入 。这里外层curry 函数只会执行一次便会被剥离,之后add会变成curried的一个引用,同时curried可以闭包引用外层的vars , 使得每次传入的参数可以长久保存 。
参考上面网上优秀答案的思路 , 写出这个不定参数处理add函数 , ...args可以接受不定参数,由于题目二中并没有题目一中 const add = curry((a, b ,c ,d) = a + b + c +d) 函数劫持的过程,所以不能直接返回函数定义,而是要返回一个执行完的函数curried(...args),同时在curried中再返回一个函数定义curried,这样就可以把函数连接起来了 。由于参数不定,这里对每次传入的参数都要进行执行处理 , 执行方法是利用函数的隐式转换,当函数执行结束时会有一个toString的操作 , 来使函数能参与其他的运算,这里我们将toString从新定义,返回vars中的累加值,从而实现add运算 。
柯里化函数概念:把接受多个参数的函数转换成接受一个单一参数的函数 。
简洁版的柯里化函数:
简洁版的柯里化函数缺点:每次只能传递两个实参,计算两个实参的和,如果想计算多个实参的和,无法实现 。
稍微复杂点的柯里化函数:
上面柯里化函数的特点:传入多少个参数就能计算出这些参数的总和,但是最后要有个结束标志,传入参数为空,表示到此截止,把前面参数的总和计算一下 。
通用的柯里化函数:
上面通用柯里化函数特点:可以根据add()的参数个数进行计算 , 假如add(a,b)有2个参数,就计算a+b;假如add(a,b,c)有3个参数,就计算a+b+c;有4个参数就计算4个参数的和,依此类推 。
推荐阅读
- ancient解谜游戏,解谜安卓游戏
- linux防火墙命令设计,linux防火墙规则设置
- vb.net捕获错误 vba 捕获异常
- js字符改asc码,js设置字符串编码
- 微信直播助手费用,微信直播助手费用高吗
- python查看函数帮助 python怎么看函数的功能
- Java代码编译优化选项,java代码如何优化
- flutter实战视频的简单介绍
- 直播教程演戏,直播间怎么表演才艺