lambda表达式,filter,map,reduce,curry,打包与解包和
当然是函数式那一套黑魔法啦,且听我细细道来。
- lambda表达式
也就是匿名函数。
用法:lambda 参数列表 : 返回值
例:
+1函数
f=lambda x:x+1
max函数(条件语句的写法如下)
f_max=lambda x,y:x if x>y else y
上述定义的函数与用def定义的函数没有区别,而且左边的f=在某些情况下并不是必要的。
- filter,map,reduce
filter函数接受两个参数,第一个是过滤函数,第二个是可遍历的对象,用于选择出所有满足过滤条件的元素,不同版本的filter的返回值稍有区别,我用的是python3.5,filter返回的是经过过滤的可遍历对象。
例:
去除小写字母
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 reduces=reduce(lambda x,y:x*y,range(1,6),1)print(s)
- 柯里化(curry)函数
如果一个函数需要2个参数,而你只传入一个参数,那么你就可以得到一个柯里化的函数,这是函数式编程语言的重要特性之一,遗憾的是,python并不能在语法层面支持柯里化调用,但它在库中提供了接口。
例:
*3函数
f_mul=lambda x,y:x*yfrom functools import partialmul3=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 Imagefrom math import sqrtim = Image.open("a.jpg")ret= im.convert(mode="RGB")ret = ret.point(lambda x:sqrt(x)*sqrt(255))ret.save("b.jpg")
lambda表达式,filter,map,reduce,curry,打包与解包和的更多相关文章
- Python中特殊函数和表达式 filter,map,reduce,lambda
1. filter 官方解释:filter(function or None, sequence) -> list, tuple, or string Return those items of ...
- Python学习(五)函数 —— 内置函数 lambda filter map reduce
Python 内置函数 lambda.filter.map.reduce Python 内置了一些比较特殊且实用的函数,使用这些能使你的代码简洁而易读. 下面对 Python 的 lambda.fil ...
- filter,map,reduce,lambda(python3)
1.filter filter(function,sequence) 对sequence中的item依次执行function(item),将执行的结果为True(符合函数判断)的item组成一个lis ...
- Python2.7学习笔记-定义函数、filter/map/reduce/lambda
我把写的代码直接贴在下面了,注释的不是很仔细,主要是为了自己复习时方便查找,并不适合没有接触过python的人看,其实我也是初学者. #定义函数 def my_abs(x): if x>=0: ...
- lambda,filter,map,reduce
# lambda,filter,map,reduce from functools import reduce print('返回一个迭代器') print((x) for x in range(5) ...
- paip.提升效率---filter map reduce 的java 函数式编程实现
#paip.提升效率---filter map reduce 的java 函数式编程实现 ======================================================= ...
- python filter map reduce
filter(function, iterable): Construct a list from those elements of iterable for which function retu ...
- Python经常使用内置函数介绍【filter,map,reduce,apply,zip】
Python是一门非常简洁,非常优雅的语言,其非常多内置函数结合起来使用,能够使用非常少的代码来实现非常多复杂的功能,假设相同的功能要让C/C++/Java来实现的话,可能会头大,事实上Python是 ...
- Python内置函数之filter map reduce
Python内置函数之filter map reduce 2013-06-04 Posted by yeho Python内置了一些非常有趣.有用的函数,如:filter.map.reduce,都是对 ...
随机推荐
- Java容器解析系列(5) AbstractSequentialList LinkedList 详解
AbstractSequentialList为顺序访问的list提供了一个骨架实现,使实现顺序访问的list变得简单; 我们来看源码: /** AbstractSequentialList 继承自 A ...
- Codeforces Round #244 (Div. 2) C. Checkposts (tarjan 强连通分量)
题目:http://codeforces.com/problemset/problem/427/C 题意:给你n座城市,m条有向道路,然后有一个机制,你在某一个城市设置检查点,那么被设置的检查点受保护 ...
- vue 使用vux封装的微信分享
main.js引入 import {WechatPlugin} from 'vux' Vue.use(WechatPlugin) 公共的jswxShare.js import Vue from 'vu ...
- IDEA将web项目打成war包
非Maven项目打包方式 按ctrl+滚动鼠标滚轮就能放大浏览器看图片了.或者将图片拖到新窗口打开. 然后点击OK,然后build一下.然后去classes文件夹下面找就能找到打成war包的项目 ...
- 认识:人工智能AI 机器学习 ML 深度学习DL
人工智能 人工智能(Artificial Intelligence),英文缩写为AI.它是研究.开发用于模拟.延伸和扩展人的智能的理论.方法.技术及应用系统的一门新的技术科学. 人工智能是对人的意识. ...
- js: var定义域问题
- 常见模块(三) pickle模块和json模块
(一)json和pickle的区别 1.json是不同编程语言实现数据交换的工具,他是用来把python中的数据对象转换成字符串或者写入文件中的,再由其他语言通过json加载进来. 2.pickle是 ...
- springboot 缓存架构
线程内部缓存:a. 局部变量HashMap, 方法间传递 b. 使用ThreadLocal 本地缓存:单jvm内共享 可以使用(Concurrent)HashMap自己实现,也可以使用GuavaCa ...
- [Java] Thread -- 避免Race Condition (Synchronized)
public class TestRaceCondition implements Runnable{ public static int counter = 0; public static voi ...
- spring IOC 和AOP 方面
spring 的2大核心 是Ioc 和 aop spring的依赖注入:在程序运行期间,由外部容器动态的将依赖对象注入到组件中 IOC: 实例化spring容器的二种方法 第一种:在类路径下寻找配 ...