Python个人学习笔记(14):函数(匿名函数、内置函数(下)、三元表达式)

news2025/3/13 11:57:28

九、匿名函数

lambda表达式
语法规则:
变量 = lambda 参数1,参数2,…:返回值
例:用lambda简化下述操作

def func(a,b):
    return a+b
ret = func(1, 2)
print(ret)

代码:

fn = lambda a,b:a+b
print(fn)
print(fn(12,13))

结果:

<function <lambda> at 0x000001E751EAAF20>
25

可以帮我们一句话创建函数
可以与某些内置函数一起用

十、内置函数(下)

(一)zip:可以把多个可迭代内容进行合并

zip自动实现如下操作:
代码:

lst1 = ["赵本山","范伟","苏有朋"]
lst2 = [40,38,42]
lst3 = ["卖拐","耳朵大有福","情深深雨濛濛"]

result = []
for i in range(len(lst1)):
    first = lst1[i]
    second = lst2[i]
    third = lst3[i]
    result.append((first,second,third))
print(result)

结果:

[('赵本山', 40, '卖拐'), ('范伟', 38, '耳朵大有福'), ('苏有朋', 42, '情深深雨濛濛')]

代码:

result = zip(lst1, lst2, lst3)
print(result)
print(dir(result)) # 查询功能

lst = list(result)
print(lst)

结果:

<zip object at 0x000001E1A9C563C0>
['__class__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getstate__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__iter__', '__le__', '__lt__', '__ne__', '__new__', '__next__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__setstate__', '__sizeof__', '__str__', '__subclasshook__'] # 包含迭代器功能

既然是迭代器,那么就可以用for循环拿到元素
代码:

for item in result:
    print(item)

结果:

('赵本山', 40, '卖拐')
('范伟', 38, '耳朵大有福')
('苏有朋', 42, '情深深雨濛濛')

还可以放到一个列表中
代码:

lst = list(result)
print(lst)

结果:

[('赵本山', 40, '卖拐'), ('范伟', 38, '耳朵大有福'), ('苏有朋', 42, '情深深雨濛濛')]

(二)locals、globals(了解)

locals:查看当前位置所有的局部变量
如果locals写在了全局作用域范围内,此时看到的就是全局作用域中的内容。
代码:

lst1 = ["赵本山","范伟","苏有朋"]
lst2 = [40,38,42]
lst3 = ["卖拐","耳朵大有福","情深深雨濛濛"]
a = 188
print(locals())

结果:

'__cached__': None, 'lstat': <built-in function lstat>, 'lst1': ['赵本山', '范伟', '苏有朋'], 'lst2': [40, 38, 42], 'lst3': ['卖拐', '耳朵大有福', '情深深雨濛濛'], 'a': 188}

如果locals放在局部作用域范围,看到的就是局部作用域的内容
代码:

def func():
    a=336
    print(locals())

func()

结果:

{'a': 336}

globals:不管写在哪,看到的都是全局作用域中的变量

(三)sorted:排序

1. 语法规则:

sorted(可迭代的, key=排序函数,reverse=True/False是否翻转,否则为从小到大)

代码:

lst = [16,22,34,68,1,213,324,49]
s = sorted(lst) # 从小到大
print(s)
s1 = sorted(lst,reverse=True) # 翻转,从大到小
print(s1)

结果:

[1, 16, 22, 34, 49, 68, 213, 324]
[324, 213, 68, 49, 34, 22, 16, 1]

2. 对字符串排序

sorted把列表中的每一项传递给排序函数,然后排序函数返回相应的值,最后根据返回值进行排序
要求:以字符串长短排序
代码:

lst = ["秋","张二嘎","比克","卡卡罗特","超级宇宙无敌大帅B"]

def func(item): # item对应列表中的每一项数据
    return len(item)

s = sorted(lst,key=func) # func后不要加(),否则变成调用函数了
print(s)

结果:

['秋', '比克', '张二嘎', '卡卡罗特', '超级宇宙无敌大帅B']

函数改成lanbda形式

lst = ["秋","张二嘎","比克","卡卡罗特","超级宇宙无敌大帅B"]
func = lambda x: len(x)
s = sorted(lst,key=func)
print(s)

由于排序函数在后文几乎不会用到,所以可以进一步简化

lst = ["秋","张二嘎","比克","卡卡罗特","超级宇宙无敌大帅B"]
s = sorted(lst,key=lambda x: len(x))
print(s)

一般情况下,lambda配合sorted使用

3. 对列表排序

lst = [
    {"id": 1, "name": "周润发", "age": 18, "salary": 56000},
    {"id": 2, "name": "周星驰", "age": 28, "salary": 51100},
    {"id": 3, "name": "周海媚", "age": 78, "salary": 56123},
    {"id": 4, "name": "周伯通", "age": 12, "salary": 513414},
    {"id": 5, "name": "周大兴", "age": 35, "salary": 563123},
    {"id": 6, "name": "周有辣", "age": 47, "salary": 561240},
    {"id": 7, "name": "周扒皮", "age": 8, "salary": 2310},
]

要求1:根据每个人的年龄排序
代码:

s = sorted(lst, key=lambda d: d["age"])
print(s)

结果:

[{'id': 7, 'name': '周扒皮', 'age': 8, 'salary': 2310}, {'id': 4, 'name': '周伯通', 'age': 12, 'salary': 513414}, {'id': 1, 'name': '周润发', 'age': 18, 'salary': 56000}, {'id': 2, 'name': '周星驰', 'age': 28, 'salary': 51100}, {'id': 5, 'name': '周大兴', 'age': 35, 'salary': 563123}, {'id': 6, 'name': '周有辣', 'age': 47, 'salary': 561240}, {'id': 3, 'name': '周海媚', 'age': 78, 'salary': 56123}]

要求2. 根据工资从大到小排列
代码:

s = sorted(lst, key=lambda d: d["salary"], reverse=True)
print(s)

结果:

[{'id': 5, 'name': '周大兴', 'age': 35, 'salary': 563123}, {'id': 6, 'name': '周有辣', 'age': 47, 'salary': 561240}, {'id': 4, 'name': '周伯通', 'age': 12, 'salary': 513414}, {'id': 3, 'name': '周海媚', 'age': 78, 'salary': 56123}, {'id': 1, 'name': '周润发', 'age': 18, 'salary': 56000}, {'id': 2, 'name': '周星驰', 'age': 28, 'salary': 51100}, {'id': 7, 'name': '周扒皮', 'age': 8, 'salary': 2310}]

(四)filter:筛选

自动提取需要的内容
语法规则:
filter(函数,可迭代对象)
列表元素依次当做参数传递给函数,函数判定之后再决定是否保留
filter是个生成器

lst = ["张无忌","张三丰","张翠山","灭绝小师太","小狐仙"]

要求1:提取姓张的人
代码:

f = filter(lambda x: x.startswith("张"),lst)
print(list(f))

结果:

['张无忌', '张三丰', '张翠山']

要求2:不要姓张的人
代码:

f = filter(lambda x: not x.startswith("张"),lst)
print(list(f))

结果:

['灭绝小师太', '小狐仙']

(五)map:映射

map(函数,可迭代对象)
列表中的每一个元素,经过函数计算之后得到的值,作为最终结果保留
map是一个生成器

lst = [1,2,3,4,5,6,7,8,9]

要求:对每一项计算平方
代码:

r = map(lambda x: x * x, lst)
print(list(r))

结果:

[1, 4, 9, 16, 25, 36, 49, 64, 81]

也可以不用map实现

result = [item * item for item in lst]
print(result)

后续数据分析的内容中,有些时候是列表推导式解决不了的,只能用map

十一、三元表达式(了解)

各大语言都有三元表达式。
目的是把简单的if判断写成一行。
语法:
结果1 if 条件 else 结果2
过程:
判断条件是否为真,如果真,返回结果1,否则返回结果2
代码:

a = 10
b = 20
c = a if a > b else b
print(c)

作用等同于:

if a > b:
    print(a)
else:
    print(b)

结果:

20

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

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

相关文章

姚安娜新剧瘦了一圈,《仁心俱乐部》急诊医生顾诗宜在线上岗

《仁心俱乐部》在芒果 TV 播出&#xff0c;湖南卫视金鹰独播剧场也随之播出&#xff0c;这一剧集受到了不少观众的关注。姚安娜在剧中饰演的急诊科医生顾诗宜&#xff0c;她为患者检查身体时动作娴熟&#xff0c;与患者沟通时展现出的耐心和专注&#xff0c;都展现出很高的专业…

串口数据记录仪DIY,体积小,全开源

作用 产品到客户现场出现异常情况&#xff0c;这个时候就需要一个日志记录仪、黑匣子&#xff0c;可以记录产品的工作情况&#xff0c;当出现异常时&#xff0c;可以搜集到上下文的数据&#xff0c;从而判断问题原因。 之前从网上买过&#xff0c;但是出现过丢数据的情况耽误…

51单片机Proteus仿真速成教程——P1-软件与配置+Proteus绘制51单片机最小系统+新建程序模版

前言&#xff1a;本文主要围绕 51 单片机最小系统的绘制及程序模板创建展开。首先介绍了使用 Proteus 绘制 51 单片机最小系统的详细步骤&#xff0c;包括软件安装获取途径、工程创建、器件添加&#xff08;如单片机 AT89C51、晶振、电容、电阻、按键等&#xff09;、外围电路&…

使用 pytesseract 进行 OCR 识别:以固定区域经纬度提取为例

引言 在智能交通、地图定位等应用场景中&#xff0c;经常会遇到需要从图像中提取经纬度信息的需求。本篇文章将介绍如何利用 Python 的 pytesseract 库结合 PIL 对图像进行预处理&#xff0c;通过固定区域裁剪&#xff0c;来有效地识别出图像上显示的经纬度信息。 1. OCR 与 …

【51单片机】程序实验15.DS18B20温度传感器

主要参考学习资料&#xff1a;B站【普中官方】51单片机手把手教学视频 开发资料下载链接&#xff1a;http://www.prechin.cn/gongsixinwen/208.html 单片机套装&#xff1a;普中STC51单片机开发板A4标准版套餐7 目录 DS18B20介绍主要特性内部结构控制时序初始化时序写时序读时序…

Vue项目上传到GitHub,vscode拉取vue项目更新后推送到GitHub上

1、新建Vue项目 2、在GitHub新建仓库 3、留意建立好仓库后提示的命令 4、进入vue项目目录&#xff0c;在空白处点击鼠标右键选择git bash here 5、输入命令 git init git add . git commit -m "注释内容" 输入之前创建GitHub仓库后记下的代码的第一句 git remote…

InternVL:论文阅读 -- 多模态大模型(视觉语言模型)

更多内容&#xff1a;XiaoJ的知识星球 文章目录 InternVL: 扩展视觉基础模型与通用视觉语言任务对齐1.概述2.InternVL整体架构1&#xff09;大型视觉编码器&#xff1a;InternViT-6B2&#xff09;语言中间件&#xff1a;QLLaMA。3&#xff09;训练策略&#xff08;1&#xff09…

【BUG】类文件具有错误的版本 61.0, 应为 52.0,请删除该文件或确保该文件位于正确的类路径子目录中。

报错&#xff1a; [ERROR] 类文件具有错误的版本 61.0, 应为 52.0 [ERROR] 请删除该文件或确保该文件位于正确的类路径子目录中。 报错截图&#xff1a; 原因&#xff1a;Java 版本和 Spring 不兼容&#xff0c;显示 Spring 版本过高 解决方法 1. 使用更高版本的 J…

康谋应用 | 基于多传感器融合的海洋数据采集系统

在海洋监测领域&#xff0c;基于无人艇能够实现高效、实时、自动化的海洋数据采集&#xff0c;从而为海洋环境保护、资源开发等提供有力支持。其中&#xff0c;无人艇的控制算法训练往往需要大量高质量的数据支持。然而&#xff0c;海洋数据采集也面临数据噪声和误差、数据融合…

双周报Vol.67: 模式匹配支持守卫、LLVM 后端发布、支持 Attribute 语法...多项核心技术更新!

2025-03-10 语言更新 模式匹配支持守卫&#xff08;Pattern Guard&#xff09; 模式守卫可以通过在模式后追加 if ... 的语法结构来指定。有模式守卫的分支只有在被模式匹配的值满足对应模式&#xff0c;并且模式守卫为真的情况下才会执行。如果模式守卫为假&#xff0c;则会…

MCP-代码解读TypeScript版本

MCP-代码解读TypeScript版本 文章目录 MCP-代码解读TypeScript版本1-参考网址2-TypeScript代码3-代码解读1-[非重点]定义函数2-[非重点]定义工具说明3-[重点]运行MCP服务 1-参考网址 B站视频参考 2-TypeScript代码 import { McpServer } from "modelcontextprotocol/sd…

写了一个二叉树构造函数和画图函数,方便debug

代码 class TreeNode(object):def __init__(self, val, leftNone, rightNone):self.val valself.left leftself.right rightdef construct_tree(nodes):if not nodes:return Noneroot TreeNode(nodes[0])queue [root]index 1while index < len(nodes):node queue.p…

docker 小记

一、卸载 查看当前版本 docker -v2. 如果有&#xff0c;先停止docker systemctl stop docker如果是yum安装&#xff0c;卸载方式为 #已防版本冲突&#xff0c;直接卸载 yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-lat…

G-Star 公益行起航,挥动开源技术点亮公益!

公益组织&#xff0c;一直是社会温暖的传递者&#xff0c;但在数字化浪潮中&#xff0c;也面临着诸多比大众想象中复杂的挑战&#xff1a;项目管理如何更高效&#xff1f;志愿者管理又该如何创新&#xff1f;宣传推广怎么才能更有影响力&#xff1f;内部管理和技术支持又该如何…

k9s入门及实战

概述 k9s&#xff0c;GitHub&#xff0c;是用于管理k8s集群的CLI&#xff0c;提供一个终端UI来与k8s集群进行交互。通过封装kubectl功能&#xff0c;k9s会以特定时间间隔监控k8s的变化&#xff0c;默认为2秒&#xff0c;并提供后续命令来与k8s资源进行交互&#xff0c;k9s可让…

redis增加ip白名单

Redis增加IP白名单 随着互联网的快速发展&#xff0c;网络安全问题也日益凸显。为了保护服务器安全&#xff0c;我们常常需要对访问服务器的IP地址进行限制。而Redis作为一种高性能的缓存数据库&#xff0c;可以用来实现IP白名单功能。本文将介绍如何使用Redis来增加IP白名单&…

git commit messege 模板设置 (规范化管理git)

配置方法 git config --global core.editor vim &#xff08;设置 Git 的默认编辑器为 Vim&#xff09;在用户根目录下&#xff08;~&#xff09;&#xff0c;创建一个.git_commit_msg文件&#xff0c;然后把下面的内容拷贝到文件中并保存。 [version][模块][类型]{解决xxx问题…

Franka机器人ROS 2 发布:赋能机器人研究和行业应用

Franka机器人 ROS 2 发布&#xff1a;赋能机器人研究和行业应用 Franka ROS 2 发布&#xff1a;赋能机器人研究和行业应用 由zlem Odeh 于Franka Robotics 发布 在机器人操作系统 (ROS) 等技术和生态系统的推动下&#xff0c;机器人世界正以前所未有的速度发展。ROS 2 是广受…

docker部署jenkins,安装使用一条龙教程

Jenkins k8s 实现CI/CD 一、简介 1. JenKins是什么? Jenkins是一个开源软件项目&#xff0c;是基于Java开发的一种持续集成工具&#xff0c;用于监控持续重复的工作&#xff0c;旨在提供一个开放易用的软件平台&#xff0c;使软件项目可以进行持续集成。 2. 什么是CI / CD…

短视频下载去水印,用什么工具好?

去除视频和图片水印是许多用户的需求&#xff0c;尤其是在分享或保存内容时。以下是6款超好用的工具&#xff0c;帮助你轻松去除水印&#xff0c;享受纯净的视觉体验&#xff1a; 1. 易下载去水印小程序 特点&#xff1a; 操作简单&#xff0c;支持抖音、快手、小红书、哔哩哔哩…