python基础之匿名函数详解


Posted in Python onApril 21, 2021

1.匿名函数介绍

匿名函数指一类无须定义标识符的函数或子程序。Python用lambda语法定义匿名函数,只需用表达式而无需申明。

在python中,不通过def来声明函数名字,而是通过 lambda 关键字来定义的函数称为匿名函数。

lambda函数能接收任何数量(可以是0个)的参数,但只能返回一个表达式的值,lambda函数是一个函数对象,直接赋值给一个变量,这个变量就成了一个函数对象。

2.语法

lambda 参数:表达式

3.使用场景

(1)需要将一个函数对象作为参数来传递时,可以直接定义一个lambda函数(作为函数的参数或是返回值)

(2)要处理的业务符合 lambda 函数的情况(任意多个参数和一个返回值),并且只有一个地方会使用这个函数,不会在其他地方重用,可以使用lambda函数

4.匿名函数和普通函数的对比

def sum_func(a, b, c):
    return a + b + c
# 将匿名函数对象赋值给 sum_lambda
sum_lambda = lambda a, b, c: a + b + c
print(sum_func(1, 2, 3))  # 6
print(sum_lambda(1, 2, 3))  # 6

5.匿名函数的多种形式

# 无参数
lambda_a = lambda :100
print(lambda_a())  # 100
 
# 一个参数
lambda_b = lambda num: num * 10
print(lambda_b(1))  # 10
 
# 多个参数
lambda_c = lambda a, b, c: a + b + c
print(lambda_c(1, 10, 100))  # 111
 
# 表达式分支
lambda_d = lambda x: x if x > 5 else x + 1
print(lambda_d(4))  # 5
print(lambda_d(6))  # 6

6.lambda 作为一个参数传递

def sub_func(a, b, func):
    print("a = ", a)
    print("b = ", b)
    print("a - b = ", func(a, b))
sub_func(3, 2, lambda a, b: a - b)
# 结果:
#     a =  3
#     b =  2
#     a - b =  1

7. lambda函数与python内置函数配合使用

sorted是Python中对列表排序的内置函数,我们使用lambda来获取排序的key

member_list = [
    {"price": 9},
    {"price": 999},
    {"price": 99}
]
new_list = sorted(member_list, key=lambda dict_: dict_["price"])
print(new_list)  #  [{'price': 9}, {'price': 99}, {'price': 999}]
number_list = [100, 77, 69, 31, 44, 56]
num_sum = list(map(lambda x: {str(x): x}, number_list))
print(num_sum)  # [{'100': 100}, {'77': 77}, {'69': 69}, {'31': 31}, {'44': 44}, {'56': 56}]

map是Python中用来做映射的一个内置函数,接收两个参数,第一个参数是一个函数,第二个参数是一个可迭代对象,map会遍历可迭代对象的值,然后将值依次传递给函数执行。我们使用lambda来实现map中的函数参数。

8.lambda 作为函数的返回值

def discount_func(discount):
    return lambda price: discount * price
 
p = discount_func(0.8)
print(p)  # <function discount_func.<locals>.<lambda> at 0x00000241352BAC10>
print(p(100))  # 80.0

 匿名函数可以作为一个函数的返回值,上面函数discount_func返回一个设定了折扣的匿名函数对象,调用这个对象,传入价格,就可以得到折扣后的价格

到此这篇关于python基础之匿名函数详解的文章就介绍到这了,更多相关python匿名函数内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
动态创建类实例代码
Oct 07 Python
python2.7读取文件夹下所有文件名称及内容的方法
Feb 24 Python
python的继承知识点总结
Dec 10 Python
python中metaclass原理与用法详解
Jun 25 Python
PyQt5响应回车事件的方法
Jun 25 Python
Python的log日志功能及设置方法
Jul 11 Python
python Gunicorn服务器使用方法详解
Jul 22 Python
python实现ip地址查询经纬度定位详解
Aug 30 Python
python安装scipy的步骤解析
Sep 28 Python
Python Json数据文件操作原理解析
May 09 Python
Django crontab定时任务模块操作方法解析
Sep 10 Python
python数字转对应中文的方法总结
Aug 02 Python
Python基础之字符串格式化详解
Apr 21 #Python
python 自动刷新网页的两种方法
python实现Thrift服务端的方法
python基础之while循环语句的使用
看看如何用Python绘制小米新版天价logo
基于python制作简易版学生信息管理系统
基于python的matplotlib制作双Y轴图
You might like
PHP常用技巧总结(附函数代码)
2012/02/04 PHP
PHP遍历目录并返回统计目录大小
2014/06/09 PHP
php CI框架插入一条或多条sql记录示例
2014/07/29 PHP
CI框架中cookie的操作方法分析
2014/12/12 PHP
Symfony2学习笔记之系统路由详解
2016/03/17 PHP
bindParam和bindValue的区别以及在Yii2中的使用详解
2018/03/12 PHP
jquery实现省市select下拉框的替换(示例代码)
2014/02/22 Javascript
Jquery插件实现点击获取验证码后60秒内禁止重新获取
2015/03/13 Javascript
js实现模拟银行卡账号输入显示效果
2015/11/18 Javascript
vuejs响应用户事件(如点击事件)
2017/03/14 Javascript
整理关于Bootstrap过渡动画的慕课笔记
2017/03/29 Javascript
解决vue-router进行build无法正常显示路由页面的问题
2018/03/06 Javascript
JavaScript 隐性类型转换步骤浅析
2018/03/15 Javascript
Vue的属性、方法、生命周期实例代码详解
2019/09/17 Javascript
JavaScript实现简单贪吃蛇效果
2020/03/09 Javascript
javascript实现智能手环时间显示
2020/09/18 Javascript
[44:22]完美世界DOTA2联赛循环赛 FTD vs PXG BO2第一场 11.01
2020/11/02 DOTA
python numpy实现文件存取的示例代码
2019/05/26 Python
Python异常模块traceback用法实例分析
2019/10/22 Python
Python PyQt5整理介绍
2020/04/01 Python
python 简单的调用有道翻译
2020/11/25 Python
pycharm 的Structure界面设置操作
2021/02/05 Python
html5 touch事件实现页面上下滑动效果【附代码】
2016/03/10 HTML / CSS
html5各种页面切换效果和模态对话框用法总结
2014/12/15 HTML / CSS
写自荐信有哪些不宜?
2013/10/17 职场文书
写给爸爸的道歉信
2014/01/15 职场文书
公务员综合考察材料
2014/02/01 职场文书
党员违纪检讨书
2014/02/18 职场文书
群众路线教师自我剖析材料
2014/09/29 职场文书
放弃遗产继承公证书
2015/01/26 职场文书
2015年司法局工作总结
2015/05/22 职场文书
地震捐款简报
2015/07/21 职场文书
导游词之沈阳清昭陵
2019/12/28 职场文书
Python 快速验证代理IP是否有效的方法实现
2021/07/15 Python
Elasticsearch Recovery 详细介绍
2022/04/19 Java/Android
win10壁纸在哪个文件夹 win10桌面背景图片文件位置分享
2022/08/05 数码科技