匿名函数进阶

前一章已经说了匿名函数,匿名函数还可以和其他内置函数结合使用

1.map

map():映射器,映射

list(map(lambda x:x*2,range(10)))  #把range产生的数字映射进lambda函数里进行计算

结果:

注意:mapmap(function, sequence[, sequence, ...])接受的参数,第一个是函数,第二个,第三个可选参数也是序列

当第一个参数不为函数时:

因为把函数放进去,即代表要进行运算处理,设置为None即表示不做计算

说到这,说一下reduce()函数

2.reduce

reduce(function, sequence[, initial])看这个参数就知道和map函数很类似对吧?

看例:

有没有发现什么?是的,此时它就是用来计算总数的

还有,reduce的第三个参数是一个基数,用来设置起始值的:

而这些所有计算最关键的都在于传入的函数f,它是设定怎么计算的,比如我要让计算做平方:

报错了,提示的是reduce必须给两个参数,我确实给了两个参数,但是还是报错啊?

再结合前面的例子,其实说的是reduce接受的函数必须接受两个参数,并不是指的reduce自身接受两个参数,所以,在使用reduce的时候,必须事先考虑好怎么计算,并不是什么都可以计算的

reduce可以用来操作阶乘:

比如5的阶乘:

那么既然都说到这了,顺便说说filter函数

3.filter函数

filter(function or None, sequence):过滤器,筛选为真的参数

例:

再看:

python2下:

python3下:

所以,python2和python3下使用filter是不同的,记住就行

同样,filter函数也可以结合lambda匿名函数来计算:

是不是方便很多?这就是匿名函数的好处

那么以上的几个函数,其实就是函数式编程的体现(你以为我会真的只是简单对匿名函数的补充?哈哈,这只是套路需要/滑稽)

函数式编程

1.什么是函数式编程?

又称泛函编程,是一种编程范型。它将计算机运算视为数学上的函数计算,并且避免可变状态以及可变数据

2.哪些是函数式编程:

函数式编程语言最重要的基础就是lambda演算,而且lambda演算的函数可以接受函数当作输入和输出

3.支持函数式编程的语言挺多的,但python支持的函数式编程有限:

1):map(function, sequence[, sequence, ...]):

将函数func作用于给定序列的每个元素,并用一个列表来提供返回值,如果func为None,则直接将后面的参数中序列中的每个元素依次组成一个新的列表,如果元素数量不对应,直接以None代替

2):reduce(function, sequence[, initial]):
将二元函数(两个参数)作用于seq序列的元素,每次携带一对(之前的结果以及下一个序列元素),依次将现有的结果和下一个值按照二元函数的计算规则计算,最后得到一个值返回,如果初始值iniial给定,则以这个初始值作为基数和序列中的第一个元素计算,得到结果再与下一个序列元素计算,依次类推得到一个值返回

3):filter(function or None, sequence):

调用一个会返回布尔值的func来遍历每个seq中的元素,返回一个使func返回值为True的元素组成的序列

4.函数式编程有如下好处:

1):代码更简洁,符合python宗旨
2):数据集操作,输入和输出都可以一起
3):没有循环体,减少临时变量,逻辑变得简洁
4):代码变成了在描述你要干什么,而不是怎么去干。

洗礼灵魂,修炼python(25)--自定义函数(6)—从匿名函数进阶话题讲解中解析“函数式编程”的更多相关文章

  1. Python第七天 函数 函数参数 函数里的变量 函数返回值 多类型传值 函数递归调用 匿名函数 内置函数

    Python第七天   函数  函数参数   函数里的变量   函数返回值  多类型传值     函数递归调用   匿名函数   内置函数 目录 Pycharm使用技巧(转载) Python第一天   ...

  2. Python的程序结构[4] -> 函数/Function[2] -> 匿名函数

    匿名函数 / Anonymous Function 匿名函数是一种不需要绑定函数名的函数 (i.e. functions that are not bound to a name).匿名函数通过 la ...

  3. PYTHON 学习笔记2 流程控制工具以及函数定义、匿名函数

    前言 在上一节的学习中.已经介绍了几种基本类型.包括字符串的定义,以及字符串中索引.切片.字符串拼接的使用方法.以及基本的整形数据运算.一些之前都没有了解过的运算符.比如 ** 乘方 //整数除法等. ...

  4. day16_函数作用域_匿名函数_函数式编程_map_reduce_filter_(部分)内置函数

    20180729    补充部分代码 20180727    上传代码 #!/usr/bin/env python # -*- coding:utf-8 -*- # ***************** ...

  5. 可爱的 Python : Python中的函数式编程,第三部分

    英文原文:Charming Python: Functional programming in Python, Part 3,翻译:开源中国 摘要:  作者David Mertz在其文章<可爱的 ...

  6. python----内置函数2与匿名函数

    1.迭代器生成器相关 range:创建一个可迭代对象,一般与for混合使用,可设置步长. for i in range(0,10,2): #步长2范围为0-10不包括10 print(i) # 0 2 ...

  7. JavaScript 函数声明,函数表达式,匿名函数,立即执行函数之区别

    函数声明:function fnName () {-};使用function关键字声明一个函数,再指定一个函数名,叫函数声明. 函数表达式 var fnName = function () {-};使 ...

  8. JS函数定义与匿名函数的调用

    一.函数声明.函数表达式.匿名函数 函数声明:function fnName () {…};使用function关键字 声明一个函数,再指定一个函数名,叫函数声明. 函数表达式 var fnName ...

  9. 深入理解,函数声明、函数表达式、匿名函数、立即执行函数、window.onload的区别.

    一.函数声明.函数表达式.匿名函数1.函数声明:function fnName () {…};使用function关键字声明一个函数,再指定一个函数名,叫函数声明. 2.函数表达式 var fnNam ...

随机推荐

  1. SqlServer 更改数据库名称

    1.首先选中需要更改数据库右击属性找到文件, 此处可直接修改数据库逻辑名称 2.选中数据库右击选择重命名修改数据库名称. 3.将数据库进行分离,找到数据库文件mdf与ldf文件,直接更改文件名称 4. ...

  2. 深度解析 Vue 响应式原理

    深度解析 Vue 响应式原理 该文章内容节选自团队的开源项目 InterviewMap.项目目前内容包含了 JS.网络.浏览器相关.性能优化.安全.框架.Git.数据结构.算法等内容,无论是基础还是进 ...

  3. dart之旅(一)

    前言 最近在看 dart 了,本着 "纸上得来终觉浅,绝知此事 markdown" 的原则,准备边学边写,写一个系列,这是第一篇.学习过程中主要是参考 A Tour of the ...

  4. Firefox37.0.1+selenium 2.53+python3.6打开浏览器时报错NameError: name 'basestring' is not defined

    环境:Win7      Firefox浏览器版本37.0.1      Python36      Selenium2.53.0 在Pycharm里执行以下3行脚本: from selenium i ...

  5. Java并发编程笔记之Semaphore信号量源码分析

    JUC 中 Semaphore 的使用与原理分析,Semaphore 也是 Java 中的一个同步器,与 CountDownLatch 和 CycleBarrier 不同在于它内部的计数器是递增的,那 ...

  6. pip解决超时问题(timeout)

    我们下载python的库一般会使用pip工具.但在下载的过程中经常会timeout,这是因为资源在国外,我们国内某些资源下载速度特别慢,主要有两种方法解决. 一.设置pip timeout超时时间 创 ...

  7. Vxlan学习笔记——原理

    1. 为什么需要Vxlan 普通的VLAN数量只有4096个,无法满足大规模云计算IDC的需求,而IDC为何需求那么多VLAN呢,因为目前大部分IDC内部结构主要分为两种L2,L3.L2结构里面,所有 ...

  8. python的Web框架,Django框架中的请求与响应

    请求与响应 简单流程图 我们先来了解一个请求与响应的大概流程  视图函数接受到的request到底是个什么对象呢? 服务器接收到http协议的请求后,会根据报文创建HttpRequest对象视图函数的 ...

  9. js判断字符串是否在数组中

    先加一个扩展函数: Array.prototype.contains = function (obj) {  var index = this.length;  while (index–) {   ...

  10. layUI Tree 的使用

    原文作者:小巷而已 [[layui-xtree 3.0]依赖layui form模块 复选框tree插件] 原文链接: https://blog.csdn.net/xianglikai1/articl ...