转载请注明出处:王亟亟的大牛之路

首先在这里祝愿大家,新年快乐,工作顺利,BUG少少!!!

本来说是在春节假期内继续维持着写文章的进度,但是还是偷懒了几天(打了4天SC2哈哈哈)

今天上的是关于Python的文章,毕竟在亲戚家拜年,懒得插各类手机调试什么的,况且确实好久没有弄Python了,就写了,废话不多,开始正题!!


函数式编程

函数是什么?

把复杂的操作化为简单的函数分解成简单的操作,这种操作就是面向过程,也就是C这类的实现的大体概念。

函数式是什么?

函数没有变量,任意一个函数,只要输入是确定的,输出就是确定的,以函数作为最基础元件的编程叫做函数式编程(传统的函数式编程里没有变量的,而Python里有)


在Python变量声明时不需要对变量类型定义像这样

a=123

而像java c这些是

int a =123 ;

Python中的变量也可以指向方法(函数,随你怎么叫了理解就行)

这里拿max方法作为例子

print('最大值函数 :', max([1, 2, 3, 100, 20]));结果:
最大值函数 : 100

返回了最大值100,那么我们把函数指向一个对象试试

maxValue = max;
print('对象指向函数 最大值为:', maxValue(10, 20))结果:
对象指向函数 最大值为: 20

那既然函数可以指向变量,那么函数也就可以当做参数传入另一个函数了吧?(猜测) 那我们来试试看!

这次拿绝对值函数abs来实验

c = absdef testABS(a, b, c):return c(a) + bprint('测试函数结果:', testABS(-1, -9, c))结果:
测试函数结果: -8

也就是1-9=-8,符合我们的设想,是可以传入一个函数的


map()

map方法有2个参数,第一个参数为一个函数,第二个参数为一个Iterable(所以你传入(),[]什么的都行了)

每次的结果会单独生成,返回的新的Iterable对象的长度不会减少。

def testMAP(a):return a + aprint('返回的结果为:', list(map(testMAP, (1, 2, 3, 4, 5))))结果:
返回的结果为: [2, 4, 6, 8, 10]

类似的实现,可以用一个循环操作,像这样

istValue = []
for x in [1, 2, 3, 4, 5, ]:listValue.append(testMAP(x))
print('返回的结果为:', listValue)

结果和上面的map效果是一样的

再贴个例子int list转字符串list

def toString(a):return str(a)print('转换为字符串:', list(map(toString, [1, 2, 3, 4])))结果:
转换为字符串: ['1', '2', '3', '4']

原Iterable对象里每个元素不会有任何关系,而reduce()函数恰恰相反


reduce()

reduce也是传入两个参数第一个参数为一个函数,第二个参数为一个Iterable,但是和map的区别在于,他把结果继续和序列的下一个元素做累积计算。

def absAll(a, b):return abs(a) + abs(b)print('返回所有值的绝对值的和', reduce(absAll, (-1, 2, -3, -10, 1)))结果:
返回所有值的绝对值的和 17流程就是
1+2=3
3+3=6
6+10=16
16+1=17

那我们把之前的toString操作结合进来(这次让他toInt),计算各总和,像这样

# map reduce组合使用
def toInt(a):return int(a)print('字符串转数字:', toInt("12"))
print('组合拳结果为:', reduce(absAll, list(map(toInt, ["1", "2", "3"]))))结果:
字符串转数字: 12
组合拳结果为: 6

这样你的程序就可以变得更丰富,更易用。


filter()

filter()函数也需要传入2个参数,第一参数为一个函数,第二个参数为一个序列。filter会遍历每个元素,然后根据第一个参数函数的逻辑判断当前元素True还是False,True就加到新的序列里,False就去掉。

我们看下例子:

def checkValue(a):return a - 5 > 0print('判断是否>5', list(filter(checkValue, [1, 6, 9, 3])))结果:
判断是否>5 [6, 9]

返回一个新序列,值为符合第一个函数逻辑的值。

源码:https://github.com/ddwhan0123/PythonExample/blob/master/示例/l6Demo.py

王亟亟的Python学习之路(八)-函数式编程,map(),reduce(),filter()相关推荐

  1. Python学习笔记__4章 函数式编程

    # 这是学习廖雪峰老师python教程的学习笔记 函数是Python内建支持的一种封装,我们通过把大段代码拆成函数,通过一层一层的函数调用,就可以把复杂任务分解成简单的任务,这种分解可以称之为面向过程 ...

  2. Python学习札记(二十) 函数式编程1 介绍 高阶函数介绍

    参考: 函数式编程 高阶函数 Note A.函数式编程(Functional Programming)介绍 1.函数是Python内建支持的一种封装,我们通过一层一层的函数调用把复杂任务分解成简单的任 ...

  3. python函数式编程读取数据-python学习笔记9:函数式编程

    函数式编程(FunctionalProgramming) 基于lambda演算的一种编程方式 程序中只有函数 函数可以作为参数,同样可以作为返回值 纯函数式编程语言: LISP, Haskell Py ...

  4. Python学习札记(二十三) 函数式编程4 sorted

    参考:sorted NOTE 1.sorted,快速排序,时间复杂度O(nlogn)渐进最优. #!/usr/bin/env python3L = []for i in range(10):L.app ...

  5. 【Python学习笔记】- 06 函数式编程

    1 什么是函数 函数是组织好的,可重复使用的,用来实现单一或相关联功能的代码块. 2 使用函数的好处 减少重复代码 程序容易扩展 保持代码的一致性 3 如何定义一个函数 以def关键词开头,后接函数的 ...

  6. python学习,day3:函数式编程,*arge,**kwargs

    对于不固定长度的参数,需要使用*arge,**kwargs来调用,区别是*arge是转换为元组,而kwargs转化为字典 # coding=utf-8 # Author: RyAn Bi def te ...

  7. Python函数式编程-map/reduce

    1.map map()传入的第一个参数是f,即函数对象本身. map()函数接收两个参数,一个是函数,一个是Interable,map将传入的函数依次作用到序列的每个元素,并把结果作为新的Iterat ...

  8. python之路 mysql 博客园_教为学:Python学习之路(二):MySQLdb的几种安装方式,以及用Python测试连接MySql...

    教为学:Python学习之路(二):MySQLdb的几种安装方式,以及用Python测试连接MySql Easy_install安装MySQLdb 很简单,以至于我不晓得该怎么说.一句话. sodu ...

  9. Python学习之路—2018/7/14

    Python学习之路-2018/7/12 3.功能开发 3.3 设计博客首页 博客首页中最重要的就是中间的文章区域,所以我首先把文章区域设计出来,一开始并没有数据,如果用orm添加或者直接在数据库添加 ...

  10. Python学习之路—2018/6/20

    Python学习之路-2018/6/20 1.模板语法之变量 views.py def index(request):import datetimes="gyq"l=[1,2,3] ...

最新文章

  1. mysql automatic_sp_privileges_mysql variable automatic_sp_privileges 疑问
  2. 完整mes代码(含客户端和server端_200行代码实现基于paxos的kv存储
  3. mysql不复制数据_复制/复制数据库而不使用mysqldump
  4. Java要怎么入门?初学者要怎么学?
  5. SQL Server-基础-经典SQL语句
  6. NOIP2015普及组第1题 45 金币 方法三(python3实现)
  7. 从零开始学python | 什么是Python JSON?
  8. 网页页面禁止用户复制源代码
  9. Socket通信学习(一):Socket通信原理
  10. pyspark--用法
  11. 拓端tecdat|R语言对BRFSS数据探索回归数据分析
  12. Atitit 异常处理之道 attilax著.docx 1. 概念 2 1.1. 异常机制的设计原理 2 1.2. Atitit.异常机制的设计原理.docx java 2 1.3. JVM看Exc
  13. C++输出全排列递归算法详细解释
  14. easyui 删除数据表格
  15. 汇编(五)堆栈平衡和寻址方式-ESP EBP
  16. nifi从入门到实战(保姆级教程)——环境篇
  17. 阿里iconfont矢量图库使用
  18. 在Centos 5.x或6.x上安装RHEL EPEL Repo
  19. [学习经验] 孩子到底什么时候学习自然拼读和国际音标?
  20. 超酷的框架JS图片处理效果

热门文章

  1. Java根据excel/word模板进行值替换并且打成压缩包
  2. C语言实现垃圾收集器
  3. ImageMagick高级教程整理
  4. 制作Ubuntu系统ISO镜像(制作启动盘)
  5. hereby,thereby,wherein
  6. SSD202 Linux开发日志记录
  7. 服务器如何托管装系统,合伙托管服务器全程体验(中)
  8. IEC TR 62544-2022 高压直流(HVDC)系统-有源滤波器的应用
  9. html 中a标签的问题(无反应,跳转,调用方法)
  10. 5G商用加速冲刺,群雄逐鹿5G芯片市场