Python lambda和Python def区别分析


Posted in Python onNovember 30, 2014

Python支持一种有趣的语法,它允许你快速定义单行的最小函数。这些叫做lambda的函数,是从Lisp借用来的,可以用在任何需要函数的地方。

lambda的语法时常会使人感到困惑,lambda是什么,为什么要使用lambda,是不是必须使用lambda?

>>> def f(x):
...   return x+2
...
>>> f(1)
3
>>> f = lambda x:x+2
>>> f(1)
3
>>> (lambda x:x+2)(1)
3

Python def和Python lambda它们有相似点也有不同点。
相似点: 这两个很重要的相似点就是都可以定义一些固定的方法或者是流程,供给程序来调用,比如上面例子中定义一个变量加2的方法。 输出的结果都是3,如果你要完成一些固定的流程的话,上面几种你都可以任意选择。

上面是相同点,那么有那些不同点?
它们的主要不同点是Python def是语句而Python lambda是表达式。lambda简化了函数定义的书写形式,使代码更为简洁。但是使用函数的定义方式更为直观,易理解。

Python里面语句是可以嵌套的,比如你需要根据某个条件来定义方法,那只能用def。用lambda就会报错。

>>> if a==1:
...   def info():
...     print '1'*5
... else:
...   def info2():
...     print 'info2'

而有的时候你需要在python表达式里操作的时候,那需要用到表达式嵌套,这个时候Python def就不能得到你想要的结果,那只能用Python lambda,如下例子:
输出e字符串出现频率最高的字母:

>>> str='www.linuxeye.com linuxeye.com'
>>> L = ([(i,str.count(i)) for i in set(str)])
[(' ', 1), ('c', 2), ('e', 4), ('i', 2), ('m', 2), ('l', 2), ('o', 2), ('n', 2), ('u', 2), ('w', 3), ('y', 2), ('x', 2), ('.', 3)]
>>> L.sort(key = lambda k:k[1],reverse = True)
>>> print L[0][0]
e
Python 相关文章推荐
Python实现生成简单的Makefile文件代码示例
Mar 10 Python
简介Python的collections模块中defaultdict类型的用法
Jul 07 Python
Python获取文件所在目录和文件名的方法
Jan 12 Python
python利用Guetzli批量压缩图片
Mar 23 Python
Python编程实现数学运算求一元二次方程的实根算法示例
Apr 02 Python
Python中实现变量赋值传递时的引用和拷贝方法
Apr 29 Python
django之跨表查询及添加记录的示例代码
Oct 16 Python
django框架防止XSS注入的方法分析
Jun 21 Python
Django 通过JS实现ajax过程详解
Jul 30 Python
基于python和flask实现http接口过程解析
Jun 15 Python
利用python下载scihub成文献为PDF操作
Jul 09 Python
基于PyQT5制作一个桌面摸鱼工具
Feb 15 Python
Python内置函数之filter map reduce介绍
Nov 30 #Python
Python Queue模块详解
Nov 30 #Python
Python socket C/S结构的聊天室应用实现
Nov 30 #Python
Python open()文件处理使用介绍
Nov 30 #Python
Python fileinput模块使用介绍
Nov 30 #Python
Python 列表list使用介绍
Nov 30 #Python
Python 字典dict使用介绍
Nov 30 #Python
You might like
PHP二维数组排序的3种方法和自定义函数分享
2014/04/09 PHP
php构造函数的继承方法
2015/02/09 PHP
php自动给网址加上链接的方法
2015/06/02 PHP
实例分析基于PHP微信网页获取用户信息
2017/11/24 PHP
javascript各浏览器中option元素的表现差异
2011/04/07 Javascript
js实现图片放大缩小功能后进行复杂排序的方法
2012/11/08 Javascript
js修改原型的属性使用介绍
2014/01/26 Javascript
node.js中的socket.io入门实例
2014/04/26 Javascript
如何正确使用Nodejs 的 c++ module 链接到 OpenSSL
2014/08/03 NodeJs
jquery uploadify 在FF下无效的解决办法
2014/09/26 Javascript
jQuery的观察者模式详解
2014/12/22 Javascript
JavaScript修改浏览器tab标题小技巧
2015/01/06 Javascript
javascript精确统计网站访问量实例代码
2015/12/19 Javascript
学习javascript面向对象 javascript实现继承的方式
2016/01/04 Javascript
jQuery无缝轮播图代码
2016/12/22 Javascript
jQuery自定义插件详解及实例代码
2016/12/29 Javascript
如何使用bootstrap框架 bootstrap入门必看!
2017/04/13 Javascript
微信小程序云函数使用mysql数据库过程详解
2019/08/07 Javascript
编写v-for循环的技巧汇总
2020/12/01 Javascript
[50:45]2018DOTA2亚洲邀请赛 4.6 淘汰赛 VP vs TNC 第一场
2018/04/10 DOTA
Python2.7+pytesser实现简单验证码的识别方法
2017/12/29 Python
Python实现可设置持续运行时间、线程数及时间间隔的多线程异步post请求功能
2018/01/11 Python
python有序查找算法 二分法实例解析
2020/02/18 Python
Python txt文件如何转换成字典
2020/11/03 Python
HTML5之SVG 2D入门3—文本与图像及渲染文本介绍
2013/01/30 HTML / CSS
整理HTML5移动端开发的常用触摸事件
2016/04/15 HTML / CSS
详解canvas绘图时遇到的跨域问题
2018/03/22 HTML / CSS
聘用意向书范本
2014/04/01 职场文书
触电现场处置方案
2014/05/14 职场文书
股份转让协议书范本
2015/01/27 职场文书
公司清洁工岗位职责
2015/04/15 职场文书
中学推普周活动总结
2015/05/07 职场文书
2015年度学校卫生工作总结
2015/05/12 职场文书
《观潮》教学反思
2016/02/17 职场文书
Nginx实现高可用集群构建(Keepalived+Haproxy+Nginx)
2021/05/27 Servers
SQL Server2019安装的详细步骤实战记录(亲测可用)
2022/06/10 SQL Server