Python之函数进阶-匿名函数

Python之函数进阶-匿名函数

匿名函数

  • 匿名:隐藏名字,即没有名称
  • 匿名函数:没有名字的函数。
  • Lambda表达式 Python中,使用Lambda表达式构建匿名函数。
    • 使用lambda关键字定义匿名函数,格式为 lambda [参数列表]: 表达式
    • 参数列表不需要小括号。无参就不写参数
    • 冒号用来分割参数列表和表达式部分
    • 不需要使用return。表达式的值,就是匿名函数的返回值。表达式中不能出现等号 lambda表达式(匿名函数)只能写在一行上,也称为单行函数
    • 匿名函数往往用在为高阶函数传参时,使用lambda表达式,往往能简化代码

lambda : 0# lambda匿名函数
# 返回结果:<function __main__.<lambda>()>
(lambda : 0)()# 调用Lambda函数
# 返回结果:0
(lambda x: 100)()# 参数x没有给值
# 报错内容:TypeError: <lambda>() missing 1 required positional argument: 'x'
(lambda x: 100)(1)# 参数x给值
# 返回结果:100
(lambda x: 100)(x=111)# 返回结果:100
def a():return Noneb = lambda : None # 单行函数,只能写一行的函数
print(a.__name__)
print(b.__name__)# lambda是匿名函数,没有名字
# 返回结果:a
# 返回结果:<lambda>
(lambda x, y=10: x + y)(5)# lambda匿名函数,加法计算
# 返回结果:15
(lambda x, y=10: x + y)(y=11, x=5)# lambda匿名函数,加法计算
# 返回结果:16
(lambda x, *, y=10: x + y)(5, y=6)# lambda匿名函数,加法计算
# 返回结果:11
(lambda x, /, *, y=10: x + y)(5, y=6)# lambda匿名函数,加法计算
# 返回结果:11
f = lambda x, /, *, y=10: x + y
print(f(5, y=11))# lambda匿名函数,加法计算
# 返回结果:16
(lambda *args: [i for i in args])(range(5)) # 因为没有解构
# 返回结果:[range(0, 5)]
(lambda *args: [i for i in args])(*range(5))# 因为没有解构
# 返回结果:[0, 1, 2, 3, 4]
(lambda *args: [i+1 for i in args])(*range(5))# 因为没有解构
# 返回结果:[1, 2, 3, 4, 5]
(lambda *args: list((i+1 for i in args)))(*range(5))# 使用了生成器
# 返回结果:[1, 2, 3, 4, 5]
(lambda *args: (i+1 for i in args))(*range(5))# 生成了一个生成器表达式
# 返回结果:<generator object <lambda>.<locals>.<genexpr> at 0x105bb2670>
(lambda *args: {i%3 for i in args})(*range(5))# 返回集合,i%3返回3的余数,0,1,2
# 返回结果:{0, 1, 2}
dict(map(lambda x:(x, x+1), range(5)))# 生成字典
# 返回结果:{0: 1, 1: 2, 2: 3, 3: 4, 4: 5}
dict(map(lambda x:(str(x), x+1), range(5)))# 生成字典
# 返回结果:{'0': 1, '1': 2, '2': 3, '3': 4, '4': 5}
",".join(map(str, range(5)))# join字符串拼接
# 返回结果:'0,1,2,3,4'
{str(i):i+1 for i in range(5)} # 字典解析式
# 返回结果:{'0': 1, '1': 2, '2': 3, '3': 4, '4': 5}
# 需求:我要一个字典,kv对,key对应的value必须是列表
d1 = {k:[] for k in 'abcde'}
print(d1)
d1['a'].append(1)
print(d1)# 每次返回的结果都是全新的,所以修改列表中的值没有覆盖其他
# 返回结果:{'a': [], 'b': [], 'c': [], 'd': [], 'e': []}
# 返回结果:{'a': [1], 'b': [], 'c': [], 'd': [], 'e': []}
d1 = dict(map(lambda x: (x, []), 'abcde'))
print(d1)
d1['a'].append(1)
print(d1)# lambda实现,每次返回的结果都是全新的,所以修改列表中的值没有覆盖其他
# 返回结果:{'a': [], 'b': [], 'c': [], 'd': [], 'e': []}
# 返回结果:{'a': [1], 'b': [], 'c': [], 'd': [], 'e': []}
d1 = dict.fromkeys('abcde', [])
print(d1)
d1['a'].append(1)
print(d1)# 指向同一个列表,1个边都会变
# 返回结果:{'a': [], 'b': [], 'c': [], 'd': [], 'e': []}
# 返回结果:{'a': [1], 'b': [1], 'c': [1], 'd': [1], 'e': [1]}
d1 = {k:[] for k in 'abcde'}
print(d1)
d1['a'].append(1)
print(d1)
d1['f'] = []
d1['f'].append(100)
print(d1)# 字典中添加kv对
# 返回结果:{'a': [], 'b': [], 'c': [], 'd': [], 'e': []}
# 返回结果:{'a': [1], 'b': [], 'c': [], 'd': [], 'e': []}
# 返回结果:{'a': [1], 'b': [], 'c': [], 'd': [], 'e': [], 'f': [100]}
from collections import defaultdictd2 = defaultdict(list)
d2['t'].extend(range(5)) # d2['t'] KeyError,会创建 d2['t'] = list()
print(d2)# d2往t这个key中extend(扩展)内容时,如果没有t这个key,就会调用list进行创建
# 返回结果:defaultdict(<class 'list'>, {'t': [0, 1, 2, 3, 4]})
from collections import defaultdictd2 = defaultdict(list)
d2['m'].add(100)
print(d2)# 报错说明,list对象没有add的属性
# 报错内容:AttributeError: 'list' object has no attribute 'add'
from collections import defaultdictd2 = defaultdict(set)
d2['m'].add(100)
print(d2)# 把list换成set(集合)就可以了。
# 返回结果:defaultdict(<class 'set'>, {'m': {100}})
from collections import defaultdictd2 = defaultdict(list)
d2['m'].append(100)
print(d2)# 返回结果:defaultdict(<class 'list'>, {'m': [100]})
from collections import defaultdictd2 = defaultdict(lambda : list())
d2['m'].append(100) # d2['m'] = (lambda :list())() => list() => []
print(d2)# 返回结果:defaultdict(<function <lambda> at 0x107e90f40>, {'m': [100]})
from collections import defaultdictd2 = defaultdict(lambda : {100})print(d2['m'])
print(d2)# 返回结果:{100}
# 返回结果:defaultdict(<function <lambda> at 0x107ac23e0>, {'m': {100}})

字典的值比较

x = ['a', 1, 'b', 20, 'c', 32]
print(sorted(x, key=str)) # 比较# 返回结果:[1, 20, 32, 'a', 'b', 'c']

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/143484.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Libra R-CNN: Towards Balanced Learning for Object Detection(2019.4)

文章目录 AbstractIntroduction引入问题1&#xff09; Sample level imbalance2) Feature level imbalance3) Objective level imbalance进行解决贡献 Related Work&#xff08;他人的work&#xff0c;捎带与我们的对比&#xff09;Model architectures for object detection&a…

每日一练 | 华为认证真题练习Day130

1、一台AR2200各由器需要恢复初始配置&#xff0c;则下面哪些描述是正确的&#xff1f;&#xff08;多选&#xff09; A. 重新指定下次启动加载的配置文件 B. 重置saved configuration C. 清除current configuration D. 重启该AR2200路由器 2、管理员想要彻底删除旧的设备配…

聊聊logback的isDebugEnabled

序 本文主要研究一下logback的isDebugEnabled isDebugEnabled public final class Loggerimplements org.slf4j.Logger, LocationAwareLogger, LoggingEventAware, AppenderAttachable<ILoggingEvent>, Serializable {//......public boolean isDebugEnabled() {retur…

突发!奥特曼宣布暂停ChatGPT Plus新用户注册!

大新闻&#xff01;就在刚刚&#xff01; OpenAI的CEO Sam Altman宣布暂停ChatGPT Plus 新用户注册&#xff01; Sam Altman对此解释道&#xff1a; 由于OpenAI开发日后ChatGPT使用量的激增超出了我们的承受能力&#xff0c;我们希望确保每个人都有良好的体验。 您仍然可以在a…

msvcp120.dll下载_msvcp120.dll文件丢失解决[dll系统文件修复]

msvcp120.dll是Microsoft Visual C库中的一个重要组件&#xff0c;属于Microsoft Visual C 2005 Redistributable Package。它提供了许多用于执行C程序所需的函数。Visual C是一款流行的集成开发环境&#xff08;IDE&#xff09;&#xff0c;广泛应用于游戏、视频和图形处理等领…

keepalived+haproxy配置集群和负载均衡

1、简介 1.1. Keepalived Keepalived 是一个基于VRRP协议来实现的LVS服务高可用方案,可以利用其来避免单点故障。一个LVS服务会有2台服务器运行Keepalived,一台为主服务器(MASTER),一台为备份服务器(BACKUP),但是对外表现为一个虚拟IP,主服务器会发送特定的消息给备…

samba 共享目录write permission deny问题修复 可读取内容但不可修改 删除 新增文件

关于 update/delete/write permission deny问题修复 0.首先在服务器端执行testparm -s &#xff0c;测试 Samba 配置并显示结果。需确保服务器端参数 read only No &#xff0c;共享目录有写入权限 一、若配置了允许匿名访问&#xff0c;使用匿名访问来操作smb需要做如下处理…

【PyQt小知识 - 2】:QTextEdit内容的更新和获取、隐藏或显示滚动条、光标插入文本、文本自适应移动

文章目录 QTextEdit更新和获取内容隐藏或显示滚动条光标插入文本文本自适应移动 QTextEdit 更新和获取内容 更新&#xff1a;QTextEdit().setText(text) 或 QTextEdit().setPlainText(text) 获取&#xff1a;QTextEdit().toPlainText() setText()和setPlainText()的区别&…

Android10 状态栏蓝牙电量图标

Android10 源码状态栏蓝牙电量图标相关类 BatteryMeterDrawableBase&#xff1a;电量图标基类 BluetoothDeviceLayerDrawable&#xff1a; LayerDrawable 包含蓝牙设备图标和电池电量图标 BatteryMeterDrawable&#xff1a;内部类&#xff0c;继承自BatteryMeterDrawableBase B…

什么是线段树?

线段树 概述 线段树&#xff08;Segment Tree&#xff09;是一种二叉树数据结构&#xff0c;通常用于解决与区间或者段相关的问题。它主要用于处理一维区间的查询和更新操作&#xff0c;例如&#xff0c;查找区间内的最小值、最大值、和、平均值等。线段树是一种灵活而强大的…

大文件分片上传、断点续传、秒传

小文件上传 后端&#xff1a;SpringBootJDK17 前端&#xff1a;JavaScriptsparkmd5.min.js 一、依赖 <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>3.1.2</ve…

1 Supervised Machine Learning Regression and Classification

文章目录 Week1OverViewSupervised LearningUnsupervised LearningLinear Regression ModelCost functionGradient Descent Week2Muliple FeatureVectorizationGradient Descent for Multiple RegressionFeature ScalingGradient DescentFeature EngineeringPolynomial Regress…

LY/T 3134-2019 室内木质隔声门检测

室内木质隔声门是指能够满足一定隔声等级要求的室内木质门&#xff0c;根据隔声性能的不同&#xff0c;分为Ⅰ级室内木质隔声门。Ⅱ级室内木质隔声门、Ⅲ级室内木质隔声门、Ⅳ级木质隔声门。 LY/T 3134-2019 室内木质隔声门检测项目 测试项目 测试标准 外观 LY/T 1923 尺寸…

UE5 - UI Material Lab 学习笔记

1、学习资料收集 UI Material Lab : https://www.unrealengine.com/marketplace/zh-CN/product/ui-material-lab 视频1&#xff1a;https://www.bilibili.com/video/BV1Hm4y1t7Kn/?spm_id_from333.337.search-card.all.click&vd_source707ec8983cc32e6e065d5496a7f79ee6 视…

记录一次 添加脚本的记录+改错记录

1.Update 和 Delete 一定要记得where条件 update 表名称 set 字段1‘修改的值’ &#xff08;单引号&#xff09; where 字段‘’ and Aid‘’; update jxkh22 set JXKH2200001 ,JXKH2201002 where B003 and JXKH22034;delete from table_name where condition delete from …

Linux控制---进程程序替换

前言&#xff1a;前面我们学洗了Linux进程退出的相关知识&#xff0c;了解了什么是进程退出&#xff0c;已经进程等待的相关话题&#xff0c;今天&#xff0c;我们来学习Linux中的进程程序替换&#xff0c;进程程序替换在Linux中可以用于实现新程序的启动、程序升级、多进程程序…

11.10 知识总结(数据的增删改查、如何创建表关系、Django框架的请求生命周期流程图)

一、 数据的增删改查 1.1 用户列表的展示 把数据表中得用户数据都给查询出来展示在页面上 添加数据 id username password gender age action 修改 删除 1.2 修…

【数据库开发】DataX开发环境的安装部署(Python、Java)

文章目录 1、简介1.1 DataX简介1.2 DataX功能1.3 支持的数据通道 2、DataX安装配置2.1 DataX2.2 Java2.3 Python 3、DataX Web安装配置3.1 mysql3.2 DataX Web3.2.1 简介3.2.2 架构图3.2.3 依赖环境3.2.4 安装 4、入门使用4.1 DataX自带打印示例测试4.2 DataX生成任务模板文件4…

kubernetes集群编排——istio

官网&#xff1a;https://istio.io/latest/zh/about/service-mesh/ 部署 [rootk8s2 ~]# tar zxf istio-1.19.3-linux-amd64.tar.gz [rootk8s2 ~]# cd istio-1.19.3/[rootk8s2 istio-1.19.3]# export PATH$PWD/bin:$PATH demo专为测试准备的功能集合 [rootk8s2 istio-1.19.3]# i…