前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >Python基础:lambda 匿名函数

Python基础:lambda 匿名函数

作者头像
py3study
发布2020-01-15 16:55:49
发布2020-01-15 16:55:49
35500
代码可运行
举报
文章被收录于专栏:python3python3
运行总次数:0
代码可运行

格式

代码语言:javascript
代码运行次数:0
运行
复制
lambda argument1, argument2,... argumentN : expression

square = lambda x: x**2
print(square(2))

与常规函数区别

  匿名函数 lambda 和常规函数一样,返回的都是一个函数对象(function object)

  lambda 是一个表达式(expression),并不是一个语句(statement)。表达式是可以被求值,类似"公式"的代码,而语句是一段完成了某种功能的可执行代码。

  所以,lambda可以用在列表内部:

代码语言:javascript
代码运行次数:0
运行
复制
l = [(lambda x:x**2) (x) for x in range(10)]
print(list(l))
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

  同样,可以作为参数

代码语言:javascript
代码运行次数:0
运行
复制
l = [(1, 20), (3, 0), (9, 10), (2, -1)]
l.sort(key=lambda x: x[1]) # 按列表中元祖的第二个元素排序
print(l)
输出
[(2, -1), (3, 0), (9, 10), (1, 20)]

  lambda 的主体是只有一行的简单表达式,并不能扩展成一个多行的代码块。

使用lambda可以简化代码

代码语言:javascript
代码运行次数:0
运行
复制
squared = map(lambda x: x**2, [1, 2, 3, 4, 5])
print(list(squared))

  上面那段代码,如果不用lambda表达式而用常规函数:

代码语言:javascript
代码运行次数:0
运行
复制
def squared2(x):
    return x[1] if isinstance(x,tuple) else x**2

squared = map(squared2, [1, 2, 3, 4, 5,(1,3)])
print(list(squared))

Python函数式编程

  Python函数式编程有三个基本函数 map()、reduce()、filter()

  map(function, iterable [,iterable2])

  map遍历可迭代对象取出元素,作为参数依次传给function函数,例:每个元素都变大2倍

代码语言:javascript
代码运行次数:0
运行
复制
l = [1, 2, 3, 4, 5]
new_list = map(lambda x: x * 2, l) # [2, 4, 6, 8, 10]
  filter(function, iterable)

  filter与map一样,遍历可迭代对象,并依次传给function,不同的是,filter会判断每次function的结果是True或False,并将结果为True的元素组成列表返回

  例:返回一个列表中的所有偶数

代码语言:javascript
代码运行次数:0
运行
复制
l = [1, 2, 3, 4, 5]
new_list = filter(lambda x: x % 2 == 0, l) # [2, 4]
  reduce(function, iterable[, initializer])

  其中function 是一个函数对象,规定它有两个参数,表示对 iterable 中的每个元素以及上一次调用后的结果,运用 function 进行计算,所以最后返回的是一个单独的数值。

  配合reduce源码理解:

代码语言:javascript
代码运行次数:0
运行
复制
def reduce(function, iterable, initializer=None):
    it = iter(iterable)
    if initializer is None:
        try:
            initializer = next(it)
        except StopIteration:
            raise TypeError('reduce() of empty sequence with no initial value')
    accum_value = initializer
    for x in it:
        accum_value = function(accum_value, x)
    return accum_value

  例 累加列表中的元素

代码语言:javascript
代码运行次数:0
运行
复制
from functools import reduce
l = [1,2,3,4,5]
result = reduce(lambda x,y:x+y, l )
print(result) #15
result = reduce(lambda x,y:x+y, l,10 )
print(result) #25

思考题

  把字典 d = {'mike': 10, 'lucy': 2, 'ben': 30} 按值从高到低排序

代码语言:javascript
代码运行次数:0
运行
复制
d = {'mike': 10, 'lucy': 2, 'ben': 30}
d = sorted(d.items(), key=lambda x: x[1],reverse = True ) #[('ben', 30), ('mike', 10), ('lucy', 2)]
d = dict(d)
print(d)

 参考:

极客时间《Python核心技术与实战》

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019/06/09 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 格式
  • 与常规函数区别
  • 使用lambda可以简化代码
  • Python函数式编程
    •   map(function, iterable [,iterable2])
    •   filter(function, iterable)
    •   reduce(function, iterable[, initializer])
  • 思考题
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档