python lambda的用法

2023-10-30

欢迎转载,转载请注明原文地址:http://blog.csdn.net/majianfei1023/article/details/45269343


lambda函数也叫匿名函数,函数没有具体的名称。先来看一个最简单例子:


[python]  view plain  copy   在CODE上查看代码片 派生到我的代码片
  1. def f(x):  
  2.     return x * 2  
  3.       
  4. g = lambda x : x * 2  

看一下 f 和 g的写法有什么不同,f是定义了一个函数,传进去一个参数x,然后x*2,g是定义了一个lambda,后面跟着一个x(这个就是参数),然后跟着一个 : x * 2 (这就是执行的操作),所以以上的 f = g。它们是完全一样的东西,你可以这么写:f(10),或者这么写: g(10)。

但是lambda存在的意义是什么吗?其实很简单,简单来说, lambda 表达式通常是在需要一个函数,但是又不想费神去命名一个函数的场合下使用。

比如,在Python中有着几个内置函数,像 map,filter,reduce,我假设你了解它们的用法。

出个简单的不能再简单的编程题:打印100以内的为3的倍数的数。

你可能会这么写:

[python]  view plain  copy   在CODE上查看代码片 派生到我的代码片
  1. def func():  
  2.     result = []  
  3.     for i in xrange(100):  
  4.         if i % 3 == 0:  
  5.             result.append(i)  
  6.     return result  

或者你比较了解Python的特性,可以用filter过滤:

[python]  view plain  copy   在CODE上查看代码片 派生到我的代码片
  1. def func(x):  
  2.     return x%3 == 0  
  3.   
  4. filter(func,[i for i in xrange(100)])  

无论怎样,我们都需要定义一个函数,或求值,或过滤,能不能不用这么麻烦,这么简单的编程题,每次要定义一个函数,很麻烦,lambda该上场了,

[python]  view plain  copy   在CODE上查看代码片 派生到我的代码片
  1. filter(lambda x:x%3==0,[i for i in xrange(100)])  

就这么一句,搞定。注意看这个lambda,跟上面的那个func,做的是完全一样的操作,只不过是不用去显示的定义它。


基础的讲完了,下面看看项目中我们怎么用lambda的吧:

比如在cocos2d-x中我们需要给按钮增加点击事件,然后点击之后触发。

我们有一个触发器函数:

[python]  view plain  copy   在CODE上查看代码片 派生到我的代码片
  1. def addBtnClickHander(btn,func):  
  2.     # 这个是通用接口,不可修改  
  3.       
  4.     def hander():  
  5.         widget = "%s_name"%btn  # 根据btn取得  
  6.         func(widget)  
  7.       
  8.     return hander  




我们在函数里面给一个按钮加一个点击事件:

[python]  view plain  copy   在CODE上查看代码片 派生到我的代码片
  1. def main():  
  2.     btn = 'enter btn'  
  3.       
  4.     addBtnClickHander(btn,onClick)  
  5.       
  6. def onClick(widget):  
  7.     print "onClick:",widget  


但是我们经常需要传递额外参数给onClick点击事件,比如传递按钮的name啊等等,这个时候lambda是一个不错的选择。

[python]  view plain  copy   在CODE上查看代码片 派生到我的代码片
  1. def main():  
  2.     btn = 'enter btn'  
  3.     name = 'name'  
  4.     addBtnClickHander(btn,lambda widget:onClick(widget,name))  
  5.       
  6. def onClick(widget,name):  
  7.     print "onClick:",widget,name  


当然我们也可以使用decorator代替lambda来增加参数,

详情请看:http://blog.csdn.NET/majianfei1023/article/details/45001021

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python lambda的用法 的相关文章

随机推荐

  • 【Python VTK】读取二维序列医学图像分割结果并进行三维重建

    一 问题描述 最近在开发过程中遇到了这样的问题 在医学图像开发过程中 我们将医学图像通过深度学习算法进行分割 现在想要通过这一套二维图像进行三维重构 以下是分割结果 图一 前列腺核磁图像分割结果 图一 前列腺核磁图像分割结果 图一 前列腺核
  • 73-C语言-计算闹钟的时间

    问题 已知现在的小时和分钟 即几点几分 并想要睡觉的时间 单位为min 求闹钟应在几点响 思路 先输入现在准备睡觉的几点几分 以及睡觉的总时长 在看问题最后求的是什么 是到时候 闹钟几点响 而闹钟的设置 先看范围 小时不能超过24小时 分钟
  • Counterfactual Zero-Shot and Open-Set Visual Recognition (CVPR2021)

    这是南洋理工张含望老师组的作品 这篇文章从因果推理出发 来根据反事实推断设计模型 出发点非常的新颖 但不容易懂 因果推理理论是一个非常不错的帮助人换角度看问题的理论工具 多多学习 文章全名叫 Counterfactual Zero Shot
  • Linux的视窗系统总结:初认识《一》

    X window Wayland DirectFB linuxfb的区别 在QT中 真正关心硬件操作的是图形引擎层 图形引擎实现方式在linux上有多个 1 通过X11 2 DFB directFB 3 LinuxFB 其中桌面PC的QT版
  • Django中的Cookie与Session

    Cookie 设置cookie 使用response对象set cookie 获取cookie 用request对象 测试 成功获取到了上一步所添加的cookie Session 一般做项目的时候Session会存到redis中 djang
  • matlab实现简单清浊音检测

    清浊音检测原理公式 清浊音检测是在一段语音信号中区分出清音段 浊音段和静音段 原理框图如下所示 1 过零率 2 对数能量 3 单位延迟自相关系数归一化 4 lpc系数 使用Leveson Durbin算法求得 取 a2 a3 aM的值即为L
  • Java基础——根类与String类

    转眼间我们已经工作完一周了 这周开始阿Q要不定时更新知识了 先让我们来学习一下java中的Object与string类吧 Object类 API Application Programming Interface 应用程序编程接口 Java
  • 给定一个整数,判断它能否被3,5,7整除,并输出以下信息:1、能同时被3,5,7整除(直接输出3 5 7,每个数中间一个空格);2、只能被其中两个数整除(输出两个数,小的在前,大的在后。

    24 int a 25 printf 请输入一个数 26 scanf d a 27 if a 3 0 28 printf 3 29 if a 5 0 30 printf 5 31 if a 7 0 32 printf 7 33 else 3
  • 模拟客户端和服务端

    import org junit jupiter api Test import java io import java net InetAddress import java net ServerSocket import java ne
  • spirng-Alibaba的介绍和导入

    3 spirng Alibaba 3 1spirng Alibaba概述和导入依赖 外链图片转存失败 源站可能有防盗链机制 建议将图片保存下来直接上传 img 4hqZgDfQ 1637066858419 https static01 im
  • 使用Python、OpenCV,ImageMagick工具箱根据原始视频制作GIF动画

    使用Python OpenCV ImageMagick工具箱根据原始视频制作GIF动画 python读取原始视频流每一帧 并生成照片保存到本地文件夹 读取本地文件夹图片 根据图片名排序 支持根据帧率过滤 指定最大多少帧照片去生成gif 调用
  • 剑指 Offer 62. 圆圈中最后剩下的数字 <约瑟夫环>

    看了诸多大神的解题还是有点不明白 故记录一下 如题 0 1 n 1这n个数字排成一个圆圈 从数字0开始 每次从这个圆圈里删除第m个数字 删除后从下一个数字开始计数 求出这个圆圈里剩下的最后一个数字 方法一 递归 数学 递归 class So
  • SpringBoot(13)过滤器+拦截器+监听器

    文章目录 一 过滤器 1 过滤器介绍 2 Filter生命周期 4 注解方式实现过滤器 WebFilter WebFilter Order 1 ServletComponentScan 启动类代码 Filter代码 5 直接注入到sprin
  • shell巡检脚本

    巡检主机系统版本 centos7 编程需求 日常巡检是每一个运维必须要做的事情 如果能用脚本实现的话 那将大大简化巡检的工作难度 root localhost shell vim sys check sh bin bash 第一部分 系统信
  • 第3篇:JVM中内存分配及回收策略

    文章目录 一 分配原理 二 原理图 小结 一 分配原理 当执行创建对象操作时 首先进行逃逸分析 其实就是该对象是否会被外部方法所引用 就是作用域 若不会则进行标量替换 就是对象中成员变量是基本数据类型的在栈帧 寄存器中进行创建 可以分担堆内
  • vue 递归组件

    递归组件 递归组件就是在模板中引用自身的组件 我们有时希望在一个组件内部渲染该组件本身 例如渲染树形结构时 需要在树根渲染子树 而子树与树根的结构是一样的 因此存在递归 一个简单的递归组件的例子如Tree vue Tree vue
  • 计算机温度压力测试,鲁大师温度压力测试怎么看结果 鲁大师的温度压力测试教程...

    很多朋友都在网上问鲁大师的温度压力测试怎么看结果 结果到底在哪里 其实小编也想知道 下面就是小编收集来的各路大神的说法 大家可以看看对比一下 说法一 鲁大师的温度压力测试不需要你开任何应用程序的 你只需要点击鲁大师 温度检测 里的 进行温度
  • Python3爬虫学习——urlib库笔记

    Python3爬虫学习 urllib库 前言 本笔记仅个人认知和见解 水平有限 还请见谅 内容大多来自Python文档和学习材料 作相应的扩充或压缩后的笔记 没有很多实例 大多是理论知识 文章目录 Python3爬虫学习 urllib库 前
  • wordpress付费阅读_免费和付费WordPress托管之间的7个区别

    wordpress付费阅读 If you ve been looking around for WordPress hosting you might have come across a number of companies offer
  • python lambda的用法

    欢迎转载 转载请注明原文地址 http blog csdn net majianfei1023 article details 45269343 lambda函数也叫匿名函数 函数没有具体的名称 先来看一个最简单例子 python view