首页 > 编程语言 > 详细

python匿名函数与内置函数

时间:2021-04-01 00:46:48      阅读:21      评论:0      收藏:0      [点我收藏+]

一、匿名函数

1)什么是匿名函数?

我们之前定义函数,都会讲函数名与函数的内存地址绑定,便于后续调用,为了方便对比,我们暂且叫这种函数为“有名函数”;匿名函数顾名思义,不会定义名字的函数,从函数的定义与调用来看,匿名函数注定在代码运行后无法再被调用,即“一次性”,正式这种特性决定了匿名函数的特殊用途

匿名函数语法如下:

lambda 参数1,参数2,...: expression

# 等价于
def f1(参数1,参数2....):
    函数体
    return 返回值

示例:

# 计算三个数之和的函数
# def 定义
def f1(x, y, z):
    res = x + y + z
    return res


f1(1, 2, 3)  # 返回6

# 匿名函数
lambda x, y, z: x + y + z
# 调用匿名函数
res = (lambda x, y, z: x + y + z)(1,2,3) # 后面加括号即传参调用,返回6

2)匿名函数与其他函数运用

因为匿名函数没有函数名,所以他的引用计数一直为0,所以一经调用结束就会被当做垃圾清除,所以应用在“一次性场景下”

# 匿名函数与max函数
# 按照字典的值取到最大的值对应的key
dic = {"kkk": 1, "hhh": 2, "jjj": 3}

res = max(dic)  # 如果只指定比较参数,那么默认按照key值比较
print(res)  # 返回"kkk"

# 函数max会迭代字典salaries,每取出一个“人名”就会当做参数传给指定的匿名函数,
# 然后将匿名函数的返回值当做比较依据,最终返回薪资最高的那个人的名字
res1 = max(dic, key=lambda k: dic[k])
print(res1)

 

二、内置函数:map、reduce、filter

1、map:map函数可以接收两个参数,一个是函数,另外一个是可迭代对象,map会依次迭代array,得到的值依次传给匿名函数(也可以是有名函数),而map函数得到的结果仍然是迭代器。

list1 = [1, 2, 3, 4, 5, 6]
res = map(lambda x: x + 1, list1)
print(res)
res.__next__() # 迭代器对象

2、reduce函数:可以接收三个参数,一个是函数,第二个是可迭代对象,第三个是初始值

  1 没有初始值,reduce函数会先迭代一次array得到的值作为初始值,作为第一个值数  传给x,然后继续迭代一次array得到的值作为第二个值传给y,运算的结果为3

  2 将上一次reduce运算的结果作为第一个值传给x,然后迭代一次array得到的结果作为第二个值传给y,依次类推,知道迭代完array的所有元素,得到最终的结果15

也可以为reduce指定初始值

# reduce
from functools import reduce

list1 = [1, 2, 3, 4, 5, 6]
res = reduce(lambda x, y: x * y, list1, 9)
print(res)
# 第一步,初始值x=9,迭代取到一个值y=1,运算得到9*1,赋值给x
# 第二步,x=9,迭代取到一个值y=2,运算得到9*2,赋值给x=18
# 第三步,x=18,迭代取到一个值y=3,运算得到18*3,赋值给x=54
# 第四步,x=54,迭代取到一个值y=4,运算得到54*4,赋值给x=216
# 第五步,x=216,迭代取到一个值y=5,运算得到216*5,赋值给x=1080
# 第六步,x=1080,迭代取到一个值y=6,运算得到1080*6,赋值给x=64800

 

python匿名函数与内置函数

原文:https://www.cnblogs.com/zhangchengchao123/p/14603371.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!