Lambda函数又称匿名函数,匿名函数就是没有名字的函数,函数没有名字也行?

当然可以啦。有些函数如果只是临时一用,而且它的业务逻辑也很简单时,就没必要非给它取个名字不可。

先来看个简单lambda函数

  1. >>> lambda x, y : x+y
  2. <function <lambda> at 0x102bc1c80>

x和y是函数的两个参数,冒号后面的表达式是函数的返回值,你能一眼看出这个函数就是是在求两个变量的和,但作为一个函数,没有名字如何使用呢?
这里我们暂且给这个匿名函数绑定一个名字,这样使得我们调用匿名函数成为可能。

  1. >>> add = lambda x, y : x+y
  2. >>> add
  3. <function <lambda> at 0x102bc2140>
  4. >>> add(1,2)
  5. 3

它等同于常规函数

  1. >>> def add2(x, y):
  2. ... return x+y
  3. ...
  4. >>> add2
  5. <function add2 at 0x102bc1c80>
  6. >>> add2(1,2)
  7. 3

lambda使用场景:

  1. #1.函数式编程:
  2. 例如:一个整数列表,要求按照列表中元素的绝对值大小升序排列
  3. >>> list1 = [3,5,-4,-1,0,-2,-6]
  4. >>> sorted(list1, key=lambda x: abs(x))
  5. [0, -1, -2, 3, -4, 5, -6]
  6.  
  7. 排序函数sorted支持接收一个函数作为参数,该参数作为 sorted的排序依据,这里按照列表元素的绝对值进行排序。
  8.  
  9. 当然,我也可以用普通函数来实现:
  10. >>> def foo(x):
  11. ... return abs(x)
  12. ...
  13. >>> sorted(list1, key=foo)
  14. [0, -1, -2, 3, -4, 5, -6]
  15. 只不过是这种方式代码看起来不够 Pythonic 而已。
  16.  
  17. lambda:这是Python支持一种有趣的语法,它允许你快速定义单行的最小函数,可以用在任何需要函数的地方:
  18. >>> add = lambda x,y : x+y
  19. >>> add(5,6)
  20. 11
  21. >>> (lambda x,y:x+y)(5,6)
  22. 11
  23.  
  24. #2.Python中最常见的filter筛选、map小刷子、reduce合并,都可以用lambda表达式来生成!
  25. 对于序列来讲,有三个函数式编程工具: filter()、map()和reduce()。
  26.  
  27. map(function,sequence):把sequence中的值当参数逐个传给function,返回一个包含函数执行结果的list。如果function有两个参数,即map(function,sequence1,sequence2)。
  28.  
  29. #求1~20的平方
  30. >>> list(map(lambda x:x*x,range(1,21))) #Python2.x使用map(lambda x:x*x,range(1,21))
  31. [1, 4, 9, 16, 25, 36, 49, 64, 81, 100, 121, 144, 169, 196, 225, 256, 289, 324, 361, 400]
  32.  
  33. filter(function,sequence):对sequence中的item依次执行function(item),将执行结果为Trueitem组成一个List/String/Tuple(取决于sequence的类型)返回。
  34.  
  35. #求1~20之间的偶数
  36. >>> list(filter(lambda x:x%2 == 0,range(1,21))) #Python2.x使用filter(lambda x:x%2 == 0,range(1,21))
  37. [2, 4, 6, 8, 10, 12, 14, 16, 18, 20]
  38.  
  39. reduce(function,sequence):function接收的参数个数只能为2,先把sequence中第一个值和第二个值当参数传给function,再把function的返回值和第三个值当参数传给function,然后只返回一个结果。
  40.  
  41. #求1~100之和
  42. >>> from functools import reduce #Python3.x之后需要导入reduce模块
  43. >>> reduce(lambda x,y:x+y,range(1,101))
  44. 5050
  45.  
  46. #求1~100之和,再加上10000
  47. >>> reduce(lambda x,y:x+y,range(1,101),10000)
  48. 15050
  49.  
  50. #3.闭包
  51. 闭包:一个定义在函数内部的函数,闭包使得变量即使脱离了该函数的作用域范围也依然能被访问到。
  52.  
  53. 来看一个用lambda函数作为闭包的例子。
  54. >>> def add(n):
  55. ... return lambda x:x+n
  56. ...
  57. >>> add2 = add(5)
  58. >>> add2(15)
  59. 20
  60.  
  61. 这里的lambda函数就是一个闭包,在全局作用域范围中,add2(15)可以正常执行且返回值为20。之所以返回20是因为在add局部作用域中,变量n的值在闭包的作用使得它在全局作用域也可以被访问到。

Lambda函数及其用法的更多相关文章

  1. C++ lambda函数及其用法(转)

    由于接触C++不久,很多东西比较陌生,今天看阿里云OSS的C++ SDK文件下载部分例子,发现有如下lambda表达式用法,故了解一下相关知识 /*获取文件到本地文件*/ GetObjectReque ...

  2. 初窥c++11:lambda函数及其用法

    转载于:点击打开链接 为什么需要lambda函数 匿名函数是许多编程语言都支持的概念,有函数体,没有函数名.1958年,lisp首先采用匿名函数,匿名函数最常用的是作为回调函数的值.正因为有这样的需求 ...

  3. 深入理解Lambda函数及其用法

    Lambda函数又称匿名函数,匿名函数就是没有名字的函数,函数没有名字也行?当然可以啦.有些函数如果只是临时一用,而且它的业务逻辑也很简单时,就没必要非给它取个名字不可. 先来看个简单lambda函数 ...

  4. lambda 函数的用法

    lambda函数又叫匿名函数, 匿名函数就是没有名字的函数,不使用def语句声明的函数.如果要声名,则需要使用lambda关键字进行声明. 一般用来定义简单的函数. 1.声明一个简单的加法匿名函数: ...

  5. lambda函数常见用法

    # lambda 参数:返回值/表达式 # print((lambda :100)()) # f = lambda a,b : a + b # print(f(10, 20)) # f = lambd ...

  6. deep_learning_Function_ lambda函数详解

    这里总结了关于 Python 中的 lambda 函数的“一个语法,三个特性,四个用法”. 一个语法: 在 Python 中,lambda 函数的语法是唯一的.其形式如下: lambda argume ...

  7. 细说Python的lambda函数用法,建议收藏

    细说Python的lambda函数用法,建议收藏 在Python中有两种函数,一种是def定义的函数,另一种是lambda函数,也就是大家常说的匿名函数.今天我就和大家聊聊lambda函数,在Pyth ...

  8. python中的lambda函数用法

    例1:传入多个参数的lambda函数def sum(x,y): return x+y用lambda来实现:p = lambda x,y:x+yprint(4,6) 例2:传入一个参数的lambda函数 ...

  9. python中 Lambda,Map,Filter,Itertools,Generator高级函数的用法

    Lambda 函数 Lambda 函数是一种比较小的匿名函数--匿名是指它实际上没有函数名. Python 函数通常使用 def a_function_name() 样式来定义,但对于 lambda ...

随机推荐

  1. Navicat Premium 连oralce报错:oracle library is not loaded

    我装的Navicat Premium是64位的,计算机也是64位的,故在oracle网上下了一个64位的instantclient-basic-windows.x64-11.2.0.4.0.zip 地 ...

  2. SpringBoot之整合Mybatis(增,改,删)

    一,在上一篇文章SpringBoot之整合Mybatis中,我们使用spring boot整合了Mybatis,并演示了查询操作.接下来我们将完善这个示例,增加增,删,改的功能. 二,改动代码 1.修 ...

  3. ETL-Kettle学习笔记(入门,简介,简单操作)

    KETTLE Kettle:简介 ETL:简介 ETL(Extract-Transform-Load的缩写,即数据抽取.转换.装载的过程),对于企业或行业应用来说,我们经常会遇到各种数据的处理,转换, ...

  4. 【django】form

    form 组件组要功能: 生成HTML标签 验证用户数据(显示错误信息) HTML Form提交保留上次提交数据 初始化页面显示内容 1.创建Form类时,主要涉及到 [字段] 和 [插件],字段用于 ...

  5. JVM 调优 - jhat

    Java命令学习系列(五)——jhat 2016-01-21 分类:Java 阅读(8708) 评论(3) 阿里大牛珍藏架构资料,点击链接免费获取 jhat(Java Heap Analysis To ...

  6. Angular toastr提示框

    1. 安装ngx-toastr包 npm install ngx-toastr --save 2. package.json中引入toastr样式文件 "styles": [&qu ...

  7. jquery复习日记(1)

    jquery封装了JavaScript常用的功能代码,提供一种简便的JavaScript设计模式,优化HTML文档操作.事件处理.动画设计和Ajax交互. 核心关键字: 链式.多功能.高效灵活   1 ...

  8. JVM(一)内存分配

    方法区: ①存储被虚拟机加载的类信息.常量.静态变量.即时编译器编译后的代码数据 ②又称为永久代,仅对于Hotspot来讲,JRockit和IBM J9里面没有永久代的概念,1.8以后是元空间,直接使 ...

  9. MYSQL SQL语句 之 select

    select语句在数据库操作中是操作频率最高的语句,使用方式也是多种多样,它的基本功能是:从表中选取数据,结果存储在一个结果集中.可以联合where,and,or,Order By,distinct, ...

  10. A-08 拉格朗日对偶性

    目录 拉格朗日对偶性 一.原始问题 1.1 约束最优化问题 1.2 广义拉格朗日函数 1.3 约束条件的考虑 二.对偶问题 三.原始问题和对偶问题的关系 3.1 定理1 3.2 推论1 3.3 定理2 ...