Python3中lambda表达式与函数式编程讲解


Posted in Python onJanuary 14, 2019

简单来说,编程中提到的 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)

结果:


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 reduce 
foo = [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的值在闭包的作用使得它在全局作用域也可以被访问到。

换成常规函数也可以实现闭包,只不过是这种方式稍显??拢?缦拢?/p>

>>> 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函数不能使代码变得更清晰,就要考虑使用常规的方式来定义函数。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对三水点靠木的支持。如果你想了解更多相关内容请查看下面相关链接

Python 相关文章推荐
Python获取央视节目单的实现代码
Jul 25 Python
django使用图片延时加载引起后台404错误
Apr 18 Python
Python 3中print函数的使用方法总结
Aug 08 Python
python实现壁纸批量下载代码实例
Jan 25 Python
Python装饰器知识点补充
May 28 Python
Python创建或生成列表的操作方法
Jun 19 Python
Django框架模型简单介绍与使用分析
Jul 18 Python
自适应线性神经网络Adaline的python实现详解
Sep 30 Python
Python偏函数Partial function使用方法实例详解
Jun 17 Python
使用Python将语音转换为文本的方法
Aug 10 Python
python tqdm库的使用
Nov 30 Python
Python图片检索之以图搜图
May 31 Python
Jupyter notebook在mac:linux上的配置和远程访问的方法
Jan 14 #Python
使用CodeMirror实现Python3在线编辑器的示例代码
Jan 14 #Python
python 根据时间来生成唯一的字符串方法
Jan 14 #Python
python ipset管理 增删白名单的方法
Jan 14 #Python
python 监听salt job状态,并任务数据推送到redis中的方法
Jan 14 #Python
在python 不同时区之间的差值与转换方法
Jan 14 #Python
Python常见数据结构之栈与队列用法示例
Jan 14 #Python
You might like
一个php作的文本留言本的例子(二)
2006/10/09 PHP
PHP开发中的错误收集,不定期更新。
2011/02/03 PHP
PHP is_subclass_of函数的一个BUG和解决方法
2014/06/01 PHP
PHP封装的一个支持HTML、JS、PHP重定向的多功能跳转函数
2014/06/19 PHP
php中的curl_multi系列函数使用例子
2014/07/29 PHP
PHP中new static()与new self()的区别异同分析
2014/08/22 PHP
PHP爬虫之百万级别知乎用户数据爬取与分析
2016/01/22 PHP
全面解析PHP操作Memcache基本函数
2016/07/14 PHP
用Javascript数组处理多个字符串的连接问题
2009/08/20 Javascript
javascript不可用的问题探究
2013/10/01 Javascript
JS小功能(onmouseover实现选择月份)实例代码
2013/11/28 Javascript
剖析Node.js异步编程中的回调与代码设计模式
2016/02/16 Javascript
基于Bootstrap的Metronic框架实现条码和二维码的生成及打印处理操作
2016/08/29 Javascript
Vue声明式渲染详解
2017/05/17 Javascript
对Vue2 自定义全局指令Vue.directive和指令的生命周期介绍
2018/08/30 Javascript
vue微信分享到朋友圈 vue微信发送给好友
2018/11/28 Javascript
使用node搭建自动发图文微博机器人的方法
2019/03/22 Javascript
5分钟快速看懂ES6中的反射与代理
2019/12/19 Javascript
JavaScript canvas仿代码流瀑布
2020/02/10 Javascript
Vue 的 v-model用法实例
2020/11/23 Vue.js
[19:26]TNC vs EG (BO3)
2018/06/07 DOTA
Python代码的打包与发布详解
2014/07/30 Python
python实现从ftp服务器下载文件
2020/03/03 Python
keras小技巧——获取某一个网络层的输出方式
2020/05/23 Python
tensorflow模型的save与restore,及checkpoint中读取变量方式
2020/05/26 Python
python 利用panda 实现列联表(交叉表)
2021/02/06 Python
耐克美国官网:Nike.com
2016/08/01 全球购物
英国大码女性时装零售商:Evans
2018/08/29 全球购物
AP澳洲中文网:澳洲正品直邮,包税收件无忧
2019/07/12 全球购物
物流管理毕业生自荐信
2013/10/24 职场文书
酒店管理专业毕业生推荐信
2013/11/10 职场文书
甜品蛋糕店创业计划书范文
2014/02/06 职场文书
美容院经理岗位职责
2014/04/03 职场文书
电大奖学金获奖感言
2014/08/14 职场文书
销售顾问工作计划书
2014/09/15 职场文书
python基础之错误和异常处理
2021/10/24 Python