今天小编就为大家分享一篇关于Python3中lambda表达式与函数式编程讲解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧

简单来说,编程中提到的 lambda 表达式,通常是在需要一个函数,但是又不想费神去命名一个函数的场合下使用,也就是指匿名函数。其一般有如下几种使用方式:

1、lambda的一般形式是关键字lambda后面跟一个或多个参数,紧跟一个冒号,以后是一个表达式。lambda是一个表达式而不是一个语句。它能够出现在Python语法不允许def出现的地方。作为表达式,lambda返回一个值(即一个新的函数)。lambda用来编写简单的函数,而def用来处理更强大的任务。例如:

f = lambda x,y,z : x+y+z print f(1,2,3) g = lambda x,y=2,z=3 : x+y+z print g(1,z=4,y=5)

结果:

6 10

2、lambda表达式常用来编写跳转表(jump table),就是行为的列表或字典。例如:

L = [(lambda x: x**2),   (lambda x: x**3),   (lambda x: x**4)] print L[0](2),L[1](2),L[2](2) D = {'f1':(lambda: 2+3),   'f2':(lambda: 2*3),   'f3':(lambda: 2**3)} print D['f1'](),D['f2'](),D['f3']()

结果:

4 8 16 5 6 8

3、lambda表达式可以嵌套使用,但是从可读性的角度来说,应尽量避免使用嵌套的lambda表达式。

Lambda函数又称匿名函数,匿名函数就是没有名字的函数,函数没有名字也行?当然可以啦。有些函数如果只是临时一用,而且它的业务逻辑也很简单时,就没必要非给它取个名字不可。lamdba函数的正确使用场景:

1、函数式编程

尽管Python算不上是一门纯函数式编程语言,但它本身提供了很多函数式编程的特性,Python中,也有几个定义好的全局函数方便使用的,像map、reduce、filter、sorted这些函数都支持函数作为参数,lambda函数就可以应用在函数式编程中。如下:

from functools import reducefoo = [2, 18, 9, 22, 17, 24, 8, 12, 27]print (list(filter(lambda x: x % 3 == 0, foo)))#[18, 9, 24, 12, 27]print (list(map(lambda x: x * 2 + 10, foo)))#[14, 46, 28, 54, 44, 58, 26, 34, 64]print (reduce(lambda x, y: x + y, foo))#139

2、闭包

闭包本身是一个晦涩难懂的概念,在这里我们以简单粗暴地理解为闭包就是一个定义在函数内部的函数,闭包使得变量即使脱离了该函数的作用域范围也依然能被访问到。lambda函数作为闭包的例子:

>>> def my_add(n):...   return lambda x:x+n
>>> add_3 = my_add(3)>>> add_3(7)10

这里lambda函数就是一个闭包,在全局作用域范围中,add_3(7)可以正常执行且返回值为10,之所以返回10是因为在my_add局部作用域中,变量n的值在闭包的作用使得它在全局作用域也可以被访问到。

换成常规函数也可以实现闭包,只不过是这种方式稍显啰嗦,如下:

>>> def my_add(n):...   def wrapper(x):...     return x+n...   return wrapper...>>> add_5 = my_add(5)>>> add_5(2)7

不过不是任何情况lambda函数都要比常规函数更清晰明了,看这个例子:

f = lambda x: [[y for j, y in enumerate(set(x)) if (i >> j) & 1] for i in range(2**len(set(x)))]

这是返回某个集合的所有子集的lambda函数,相信你要看一会儿才能看明白。

python中有这样一句话是Explicit is better than implicit(明了胜于晦涩)。若用lambda函数不能使代码变得更清晰,就要考虑使用常规的方式来定义函数。

lambda函数if_Python3中lambda表达式与函数式编程讲解相关推荐

  1. lambda函数if_Python中lambda的使用,与它的三个好基友介绍

    匿名函数lambda 除了def语句,python还提供了一种生成函数对象的表达式形式.由于它与LISP语言中的一个工具类似,所以称为lambda. 就像def一样,这个表达式创建了一个之后能够调用的 ...

  2. lambda函数if_Python中lambda的使用,与它的三个好基友介绍!

    匿名函数lambda 除了def语句,python还提供了一种生成函数对象的表达式形式.由于它与LISP语言中的一个工具类似,所以称为lambda. 就像def一样,这个表达式创建了一个之后能够调用的 ...

  3. lambda函数python-python中lambda函数

    1.lambda函数使用如下: lambda语句中,冒号前是参数,可以有多个,用逗号隔开,冒号右侧的是返回值 >>> g=lambda x,y:x*y >>> g( ...

  4. java里函数式表达式_Java8函数式编程 (一) 数据流和lambda表达式

    JDK 1.8中引入了函数式编程(functional programming,FP),如果您已习惯OOP,一定会感到困惑:什么是函数式编程?这样的编程模式有什么好处? 本文将通过简单的实例令读者对函 ...

  5. lambda 函数式编程_Java 8 Lambda表达式的函数式编程– Monads

    lambda 函数式编程 什么是monad ?: monad是一种设计模式概念,用于大多数功能编程语言(如lisp)或现代世界的Clojure或Scala中. (实际上,我会从scala复制一些内容. ...

  6. Java 8 Lambda表达式的函数式编程– Monads

    什么是monad ?: monad是一种设计模式概念,用于大多数功能编程语言(如Lisp)或现代世界的Clojure或Scala中. (实际上,我会从scala复制一些内容.)现在,为什么它在Java ...

  7. Python lambda表达式与函数式编程

    Python学习笔记(十二):lambda表达式与函数式编程 原创  2013年07月22日 21:57:47 标签:

  8. java lambda函数_最常用的 Java 8 中的 Lambda 函数(项目中实用笔记)

    最常用的 Java 8 中的 Lambda 函数(项目中实用笔记) 简介 Java 8 中的新特性,虽然现在都出到了Java14版本,不过在日常的开发过程中,8的版本是足够使用了,再说现在的8以上的版 ...

  9. python中使用函数的优点是什么_python函数式编程是什么?

    在以下的文章之中我们来了解一下什么是python中的函数式编程.了解一下python中函数式编程是什么意思,以及python编程函数能应用在什么地方. 函数式编程 函数是Python内建支持的一种封装 ...

最新文章

  1. pandas dataframe 删除带空值的行 各种空值 (dropna()、isna()、isnull()、fillna())
  2. Cacti 自定义脚本监控
  3. 五道java小题,补更四道java小题
  4. golang mysql单元测试_golang test测试使用
  5. Gstreamer基础知识介绍
  6. php本地测试还是线上,PHP本地与远程测试(一)
  7. 三星s9php禁用列表,ADB禁用列表
  8. concat特征融合_MSFNet:多重空间融合网络进行实时语义分割(北航和旷视联合提出)...
  9. xss挖掘思路分享_新手指南 | permeate靶场漏洞挖掘思路分享
  10. 如何在IDEA中导出jar包
  11. 专业数字功放工作原理以及应用电路介绍
  12. WPS Office Pro v10.8.2.6726 绿色便携专业增强版
  13. EXCEL表格超链接图片
  14. 利用Bootstrap框架制作WordPress自适应主题
  15. 设计模式的艺术 结构性模式之组合模式
  16. 最全互联网Linux工作规划!
  17. NCEP再分析数据(FNL)Python下载
  18. html 拼图游戏,HTML 和 JS 的拼图游戏
  19. 《NFL橄榄球》:田纳西泰坦·橄榄1号位
  20. 小米AX9000安装docker的Portainer面板从社区版升级到商业版参考

热门文章

  1. Spark基础学习笔记01:初步了解Spark
  2. 使用Linux版Redis
  3. C ++ 类 | 构造函数w参数_6
  4. 2017.9.19 禁忌 失败总结
  5. mysql image类型_MyCat教程【mysql主从复制实现】
  6. 【Level 08】U05 Better option L6 Informative posts
  7. 【英语学习】【WOTD】disavow 释义/词源/示例
  8. Pentium II Pentium III架构/微架构/流水线 (6) - SSE
  9. C++:计算选手最终得分
  10. C++:成绩类Score