10 | 简约不简单的匿名函数
景霄
该思维导图由 AI 生成,仅供参考
你好,我是景霄。
上一节,我们一起学习了 Python 中的“常规”函数,用途十分广泛。不过,除了常规函数,你应该也会在代码中见到一些“非常规”函数,它们往往很简短,就一行,并且有个很酷炫的名字——lambda,没错,这就是匿名函数。
匿名函数在实际工作中同样举足轻重,正确地运用匿名函数,能让我们的代码更简洁、易读。这节课,我们继续 Python 的函数之旅,一起来学习这个简约而不简单的匿名函数。
匿名函数基础
首先,什么是匿名函数呢?以下是匿名函数的格式:
我们可以看到,匿名函数的关键字是 lambda,之后是一系列的参数,然后用冒号隔开,最后则是由这些参数组成的表达式。我们通过几个例子看一下它的用法:
这里的匿名函数只输入一个参数 x,输出则是输入 x 的平方。因此当输入是 3 时,输出便是 9。如果把这个匿名函数写成常规函数的形式,则是下面这样:
可以看到,匿名函数 lambda 和常规函数一样,返回的都是一个函数对象(function object),它们的用法也极其相似,不过还是有下面几点区别。
第一,lambda 是一个表达式(expression),并不是一个语句(statement)。
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
- 深入了解
- 翻译
- 解释
- 总结
Python中的匿名函数lambda是一种简短、一行的函数表达式,具有简洁易读的特点,适用于简单功能实现。文章介绍了lambda函数的基础知识和使用场景,以及Python的函数式编程特性。函数式编程的优点在于其纯函数和不可变的特性使程序更加健壮,易于调试和测试。Python提供了map()、filter()和reduce()等函数,通常结合lambda一起使用。这些函数在对集合中的元素进行操作时具有高效性能。总的来说,文章通过介绍lambda函数和函数式编程,让读者了解了Python中的匿名函数和函数式编程的特点及应用场景。
仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《Python 核心技术与实战》,新⼈⾸单¥59
《Python 核心技术与实战》,新⼈⾸单¥59
立即购买
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
登录 后留言
全部留言(133)
- 最新
- 精选
- Hoo-Ah第一问:sorted(d.items(), key=lambda x: x[1], reverse=True); 第二问:最开始接触 lambda 匿名函数的时候觉得蛮不理解的,觉得这个函数没有灵魂,用完一次就扔掉。后来在和高阶函数、列表生成式搭配使用以及一些小功能的使用上觉得很好用,这样代码即简洁又易于阅读。 注:匿名函数最难理解的地方就是要传入的参数是一个可迭代的对象,lambda 内部会调用可迭代对象的 __next__ 方法取值当作参数传入 lambda 函数冒号前面的值,然后把表达式计算的结果进行返回。
作者回复: 你说的对。关于迭代器生成器后面会讲到,所以这篇文章没有提及。
2019-05-31982 - lmingzhipython3 -mtimeit -s'xs=range(1000000)' 'map(lambda x: x*2, xs)' 这个地方map生成的是生成器,与后面的2个做比较感觉不大合适,是否更改为测试list(map(lambda x: x*2, xs))更恰当?
作者回复: 实际情况中,Map返回的对象依然可以直接遍历,所以直接比较从实用的角度上来说也是可以的,Map在Python3中变为Lazy了以后,速度得到了很大的提升。当然,如果以返回的类型一致为标准,你的建议也是可以的
2019-05-31336 - 向南```python sorted(d.items(), key=lambda x: x[1], reverse=True) ``` lambda函数在数据清洗的时候,作用很大
作者回复: 必须的
2020-03-077 - daowuli_chihai下面代码,print(new_list)报错,而改成print(list(new_list))可以输出所有偶数,python3.8版本 和之前版本 不同? l = [1, 2, 3, 4, 5] new_list = filter(lambda x: x % 2 == 0, l) # [2, 4]
作者回复: filter/map都是返回一个iterator,我注释写成[2, 4]只是为了更直观的表示这个函数的功能哈
2020-06-122 - 谁谁请问老师,如何理解这一句: [(lambda x: x*x)(x) for x in range(10)] 其中的(lambda x: x*x)(x),这个lambda函数括起来是代表直接调用?
作者回复: 这个就是语法啊,这句话的意思就是对于1-10的每个整数,都调用lambda函数(自身相乘)
2019-12-2331 - Freshman# 获得排序的元组,字典 list_1 = [item for item in ori_dict.items()] list_1.sort(key=lambda val: val[1], reverse=True) # 重新生成字典 dict_1 = {key: value for key, value in list_1}
作者回复: 对
2019-10-141 - Kevin第一问:不知道这么写对不对。 d = {'mike': 10, 'lucy': 2, 'ben': 30} print(sorted(d, key=lambda x:x[1], reverse=False)) 输出:['ben', 'mike', 'lucy']
作者回复: 没问题哈
2020-06-182 - Steve喜欢这种讲解方式,能不能再开一个JavaScript的课?
作者回复: Javascript我不是特别精通哈
2020-05-02 - 可乐泡枸杞sorted(d.items(), key= lambda x:-x[1])
作者回复: 嗯嗯
2019-06-01 - Jove思考题答案: d = {'mike': 10, 'lucy': 2, 'ben': 30} sorted(d.items(), key=lambda x:x[1])
作者回复: 由高到低排序,注意加上reverse=True
2019-05-31
收起评论