Python-函数式编程-map reduce filter lambda 三元表达式 闭包
lambda
匿名函数,核心是作为算子,处理逻辑只有一行但具有函数的特性,核心用于函数式编程中
三元运算符
其实本质上是if分支的简化版,满足条件返回 if 前面的值,不满足条件返回 else后面的值
- # 100 < 100 返回 False, 则 返回 else后面的值
- value = 100 if 100 < 100 else 10
- print(value)
map
映射函数(依次把可迭代对象(可多个)中的值依次传递到函数中,然后返回生成器(长度以最短的为基础))
- numbers = [1, 2, 3, 4]
- names = ['bei_men_chui_xue', 'qi_niu_yun']
- numbers = map(lambda value: value + 1, numbers)
- students = map(lambda value: value.upper(), names)
- print(list(numbers))
- print(list(students))
reduce
减少函数(连续计算,处理函数中第一个值是上一次函数执行的返回结果,第二个值是依次从迭代对象中的值,传递完则返回最后函数执行的结果)
- from random import randint
- from functools import reduce
- numbers = [randint(-10, 10) for _ in range(10)]
- print(numbers)
- print(sum(numbers))
- numbers_sum = reduce(lambda one, two: one + two, numbers)
- print(numbers_sum)
filter
依次依顺序把可迭代对象传入一个函数,获取函数返回为True的值,变成生成器
- from random import randint
- numbers = [randint(-10, 10) for _ in range(10)]
- print(numbers)
- # 取大于等于0 的整数
- result = filter(lambda value: value >= 0, numbers)
- print(list(result))
闭包
函数 + 环境变量(放在上层函数, 上层函数没有任何参数,则不能形成闭包) (不再受外层函数之外的任何参数影响)
闭包架构 函数内再定义一个函数,外层函数返回内层函数名,内层函数需要引用外层函数变量
闭包意义:函数调用的现场(上层函数的变量)保存了起来, 通过 nonlocal 声明不是当前函数局部变量,进行现场变量的修改
闭包是装饰器实现的原理,所有的闭包问题都可以通过面向对象类的方式解决,选择简单实现的额方法
- def is_jpg(name):
- """判断文件的后缀名是是不是jpg,如果不是则添加上jpg"""
- def wrapper(filename):
- if filename.endswith(name):
- return filename
- else:
- return filename + name
- return wrapper
- if __name__ == '__main__':
- f = is_jpg('.jpg')
- print(f('beimenchuixue.txt'))
- print(f('beimenchuixue.jpg'))
经验:
1. 三元运算符其实本质上是if分支的简写逻辑
2. 经常使用的是命令是编程,命令式编程包含流程控制、函数、分支、循环,函数式编程包括map reduce filter lambda,理论上可以替换所有命令式编程
3. 命令式编程可以使用函数式编程简化代码逻辑
4. 函数闭包,本质上保留了上层函数的变量
Python-函数式编程-map reduce filter lambda 三元表达式 闭包的更多相关文章
- Python函数式编程-map/reduce
1.map map()传入的第一个参数是f,即函数对象本身. map()函数接收两个参数,一个是函数,一个是Interable,map将传入的函数依次作用到序列的每个元素,并把结果作为新的Iterat ...
- Python函数式编程——map()、reduce()
文章来源:http://www.pythoner.com/46.html 提起map和reduce想必大家并不陌生,Google公司2003年提出了一个名为MapReduce的编程模型[1],用于处理 ...
- (转)Python函数式编程——map()、reduce()
转自:http://www.jianshu.com/p/7fe3408e6048 1.map(func,seq1[,seq2...]) Python 函数式编程中的map()函数是将func作用于se ...
- map/reduce/filter/lambda
Python内建了map()/reduce()/filter()函数. map()函数接收两个参数,一个是函数,一个是Iterable,map将传入的函数依次作用到序列的每个元素,并把结果作为新的It ...
- Python的函数式编程: map, reduce, sorted, filter, lambda
Python的函数式编程 摘录: Python对函数式编程提供部分支持.由于Python允许使用变量,因此,Python不是纯函数式编程语言. 函数是Python内建支持的一种封装,我们通过把大段代码 ...
- python 中的map(), reduce(), filter
据说是函数式编程的一个函数(然后也有人tucao py不太适合干这个),在我看来算是pythonic的一种写法. 简化了我们的操作,比方我们想将list中的数字都加1,最基本的可能是编写一个函数: I ...
- 1.python函数式编程-map函数
编程方法论 面向过程 函数式 面向对象 面向过程 将编程过程拆分成多个步骤,在函数中按照每个步骤进行编程: 函数式编程 编程语言定义的函数+数学意义的函数 1.不可变,不用变量保存状态,不修改变量: ...
- 函数式编程Map()&Reduce()
.forEach():每个元素都调用指定函数,可传三个参数:数组元素丶元素索引丶数组本身丶 , , , , , , , ]; a.forEach(function(v,i,a){a[i]=v+;}); ...
- python基础之map/reduce/filter/sorted
---map(fun,iterable) 首先来看一看map()函数,map函数接受两个参数,第一个参数是函数的名称,第二个参数一个可迭代对象.即map(fun,iterable) map函数就是将具 ...
随机推荐
- Java枚举简述
Java 枚举(enum) Java 枚举是一个特殊的类,一般表示一组常量,比如一年的 4 个季节,一个年的 12 个月份,一个星期的 7 天,方向有东南西北等. Java 枚举类使用 enum 关键 ...
- TCP/IP网络编程之数据包协议
一.概要 在了解了网络字节序之后,接下来就是要讲最最重点的消息协议.数据包是什么呢,数据包可以理解为两个人讲电话说的每一句话的内容.通过大家约定好的方式去理解.达到只有接听电话两个人才懂的东西.在程序 ...
- 微信小程序如何快速开通流量主
1.先开发小程序,小程序需要有亮点,毕竟新颖(这样别人才更好去点击查看) 2.条件是独立访客(UV)不低于1000,1000人说多不多,说少也不少,因为小程序是没有链接的,是不可以进行一个流量刷取的, ...
- 服务发现Eureka、zookeeper、consul
Spring Cloud为开发人员提供了工具,以快速构建分布式系统中的某些常见模式(例如,配置管理,服务发现,断路器,智能路由,微代理,控制总线,一次性令牌,全局锁,领导选举,分布式会话,群集状态). ...
- AD18 PCB中添加中文字符串显示乱码问题解决
该问题是由于字符串的自体类型设置问题,AD默认是[stroke],我们点击[TrueType]即可正常显示.PS:AD18搞啥呢,默认显示输入内容不行吗,找半天!!!
- boot磁盘空间大于80警报
WARNING=80SPACE_USED=`df |grep '^/dev/sda' |tr -s ' ' %|cut -d% -f5|sort -n|tail -n1`[ "$SPACE_ ...
- css学习入门-第一个css程序
1.css的优势: --内容与表现分离 --网页结构统一,可以实现复用 --样式丰富 2.css的3种导入方式 2.1行内样式 <h1 style="color: red"& ...
- Bitmap转ImageSource
bitmap to bytes Bitmap b = new Bitmap( "test.bmp "); MemoryStream ms = new MemoryStream(); ...
- oracle数据库备份 -九五小庞
oracle数据库备份
- TIKTOK 美国制裁
今天在B站上看了沈教授和李自然说关于TIKTOK对于美国的声明采取的做法的一些看法.其实对于他们的看法,我觉得没有对错之分.正像两个新发的观点,在没有得到历史的验证前,谁也不会承认谁错了.更多的是两个 ...