Python中的匿名函数和函数式编程
Python中的匿名函数和函数式编程
文章目录
- Python中的匿名函数和函数式编程
- 一、匿名函数
- 匿名函数的格式:
- 二、函数式编程
- map()
- filter()
- reduce()
- 区别
- 三、‘三目运算符’
- 1. Python 的语法支持
一、匿名函数
Python中的匿名函数,称为lambda表达式
匿名函数的格式:
lambda argument1, argument2,... argumentN : expression# 关键字 参数 : 返回值
比如,计算平方
square = lambda x: x**2
square(3)
# 对字典中的key/value,根据value进行从大到小排序:dict = {'mike': 10, 'lucy': 2, 'ben': 30}
list = sorted(dict.items(), key=lambda key:key[1], reverse=True)
print(list)
for key, value in list:print("key={}, value={}".format(key, value))#
[('ben', 30), ('mike', 10), ('lucy', 2)]
key=ben, value=30
key=mike, value=10
key=lucy, value=2
lambda的主体只有一行的简单表达式,不能扩展成一个多行的代码块
二、函数式编程
函数式编程中的函数,都是由纯函数组成。纯函数指函数本身相互独立,互不影响,对于相同的输入,总有相同的输出,没有任何副作用。
举例说明,对一个list,让列表中的元素值都变为原来的两倍
def multiply_2(list):for index in range(0, len(list)):list[index] *= 2return list
上面的代码不是纯函数,列表中的值被改变了,如果多次调用,每次得到的结果都是不一样的。
下面改造一下:
def multiply_2_pure(l):new_list = []for item in l:new_list.append(item * 2)return new_list
Python 中提供了 几个函数:map() 、filter()、reduce(),通常结合匿名函数lambda一起使用
map()
map(function, iterable)
它对iterable中的每个元素,都执行function这个函数,最后返回一个可遍历的集合。
list = [1, 2, 3, 4, 5]
new_list = map(lambda x: x*2, list)[2, 4, 6, 8, 10]
xs=range(1000000)
map(lambda x: x*2, xs)[x * 2 for x in xs]
list = []
for i in xs: list .append(i * 2)
上面3种方式,map函数是最快的。
map()函数由C语言写的,运行时不需要通过Python解释器间接调用,并且做了诸多优化。
filter()
filter(function, iterable)
表示对iterable中的每个元素,都使用function来判断,并返回True或者False,最后将返回True的元素,组成一个集合返回
。
例子:判断一个list中的所有偶数
list = [1, 2, 3, 4, 5]
new_list = filter(lambda x: x % 2 == 0, list)[2, 4]
reduce()
reduce(function, iterable, init = None)
对一个集合做一些累积操作,它对每个元素以及上一次调用返回的结果,运用function进行计算,最后返回的是一个单独的值。
例如,计算一个list中元素的乘积:
list = [1, 2, 3, 4, 5]
result = reduce(lambda x, y: x*y, list)
120
区别
- filter(function, sequence):对sequence中的item依次执行function(item),将执行结果为True的item组成一个List/String/Tuple(取决于sequence的类型)
- filter(function or None, sequence) -> list, tuple, or string:入参为函数和列表/元组/字符串,返回值为item列表/元组/字符串。
- map(function, sequence) :对sequence中的item依次执行function(item),将执行结果function(item)组成一个List返回。
map(function, sequence[, sequence, ...]) -> list:入参是为函数和列表/元组/字符串,返回值为function(item)列表。
reduce(function, sequence, starting_value):对sequence中的item顺序迭代调用function,如果有starting_value,还可以作为初始值调用。function接收的参数个数只能为2,先把sequence中第一个值和第二个值当参数传给function,
再把function的返回值和第三个值当参数传给function,然后只返回一个结果。- reduce(function, sequence[, initial]) -> value:入参是为函数和列表/元组/字符串和初始值,返回值为数值。
三、‘三目运算符’
1. Python 的语法支持
为真时的结果 if 判断条件 else 为假时的结果(注意,没有冒号)
x = x+1 if x%2==1 else x
在比如我们欲实现一个基础版本(递归版本)的斐波那契数列:
def fn(n):return n if n < 2 else fn(n-1)+fn(n-2)
Python 中的三目运算符目的是得到一个结果,未必就是将该结果return,或者进行简单的变量赋值,如下:
l = []
l.append(1 if x>=1. else 0)# 将会给形式带来巨大的简洁
Python中的匿名函数和函数式编程相关推荐
- python中的匿名函数_python匿名函数
文章导读: 以前自己一直没搞明白Python中的匿名函数,现在拿这个问题基本上搞明白了,拿自己的理解整成一篇文章,附带大量例子,让其更加好理解. 在编程语言中,函数的应用: 1. 代码块重复,这时候必 ...
- python中定义匿名函数的关键字是,Python中的匿名函数
写python的时候,大多数场景下,我都是if else选手,因为最核心的逻辑几乎都是通过if else语句来实现的.关于匿名函数这块儿,其实可以用常见的循环等方法来实现,但是如果你想成为一个pyth ...
- python中匿名函数的作用_什么是Python中的匿名函数
匿名函数 lambda x , y : x+y 1.匿名的目的就是要没有名字,给匿名函数赋给一个名字是没有意义的. 2.匿名函数的参数规则.作用域关系与有名函数是一样的. 3.匿名函数的函数体通常应该 ...
- matlab匿名函数求导,MATLAB中的匿名函数和Python中的匿名函数
在MATLAB和Python中都有一个叫做匿名函数的东西,在这里对比一下. 一. MATLAB中这样来定义一个匿名函数: f = @(x1, x2, ...) exper @后面的括号里面是自变量,然 ...
- (转)函数作用域,匿名函数,函数式编程,面向过程,面向对象
函数作用域 ? 1 2 3 4 5 6 7 8 9 10 def first(): name = 'Wangben' def second(): name = 'Men ...
- Python 中的匿名函数,你会用吗
概念 我们从一个例子引入. 这里有一个元素为非空字符串的列表,按字符串最后一个字母将列表进行排序.如果原列表是 ['abc', 'g', 'def'],则结果应该是 ['abc', 'def', 'g ...
- Python 中的匿名函数,你滥用了吗?
概念 我们从一个例子引入. 这里有一个元素为非空字符串的列表,按字符串最后一个字母将列表进行排序.如果原列表是 ['abc', 'g', 'def'],则结果应该是 ['abc', 'def', 'g ...
- python中的匿名函数lambda
匿名函数 python 使用 lambda 来创建匿名函数. 所谓匿名,意即不再使用 def 语句这样标准的形式定义一个函数. lambda 只是一个表达式,函数体比 def 简单很多. lambda ...
- Python中的匿名函数及递归思想简析
匿名函数 前言 很多人学习python,不知道从何学起. 很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手. 很多已经做案例的人,却不知道如何去学习更加高深的知识. 那么针对这三类 ...
最新文章
- 更改windows域名
- 词云制作 Python
- 一个基于C++的多线程编程实例(CreateThread函数)
- 【GAN优化】详解对偶与WGAN
- int b = 1;int c = b^0xff;求C
- mysql练习数据_数据分析学习第一关-入门
- C++(STL):03---智能指针之shared_ptr
- java swt 下拉列表_求助:SWT 下拉列表
- 03-从尾到头打印链表
- Json——使用Json jar包实现Json字符串与Java对象或集合之间的互相转换
- 易混单词 expect VS except
- 51Nod-1008 N的阶乘 mod P【模除】
- 基于CarMaker的C-NCAP主动安全系统试验仿真(二)
- 什么是Servlet容器?
- 制作AR换装游戏(上篇AR识图)#1024程序员节#
- MNE学习笔记(六):Epoched data的可视化
- 【CXY】JAVA基础 之 异常
- word插入excel文档显示图标的方法
- 金融作业:股吧评论_爬取、情绪与股价对比(贵州茅台和上证指数)
- 回撤率 python_求问怎么用python求夏普比率和最大回撤率呢
热门文章
- matlab复数方程的根,matlab解一元三次方程,得到的都是复数根。
- bert模型中的[CLS]、[UNK]、[SEP]
- 快递鸟电子面单打印功能基于java
- Get data from file(xxx.png) failed!
- Django框架(二)
- ibatis实现1对多
- twitter storm源码走读(二)
- Shell中的一些小技巧
- linux TCP数据包封装在SKB的过程分析
- 中国互联网哪来的所谓“所谓”的创新?“狗日”的腾讯究竟动了谁的蛋糕?...