Python类型处理与推导式

欢迎来到啾啾的博客🐱。
记录学习点滴。分享工作思考和实用技巧,偶尔也分享一些杂谈💬。
有很多很多不足的地方,欢迎评论交流,感谢您的阅读和评论😄。

目录

  • 1 引言
  • 2 类型处理
  • 3 高效操作AI开发常见数据结构
    • 3.1 list推导式
    • 3.2 dict推导式

1 引言

速成之后巩固一下。

2 类型处理

和Java静态类型不同,Python是动态类型的。
动态类型不用声明,但在使用时往往不知道类型,所以Python 3.5版本之后引入了一个非常重要的特性:

  • 类型提示 (Type Hinting)
    它的作用,就是在代码中“提示”一个变量、函数参数或返回值应该是什么类型。
**传统的Python方式 (纯动态类型):**
name = "World"
process_id = 123**现代的Python方式:**
name: str = "World"
process_id: int = 123

和Java不同,Python的类型提示在默认情况下是 不强制 的。也就是说,即便你给一个标记为 str 的变量赋予一个整数,Python解释器本身在运行时 不会报错
它的真正威力在于 开发阶段。现代的IDE和一些叫做“静态类型检查器”(如Mypy)的工具,会读取这些提示,像Java的编译器一样,在代码运行前就给你指出潜在的类型错误。

除了这个,Python还有一个Pydantic库,可以用于处理复杂情况下的数据类型,让代码变得更具可读性,且能抛出清晰的错误。

from pydantic import BaseModel
from typing import List, Dict# 1. 我们用类型提示来“定义”我们期望的数据结构
class Message(BaseModel):role: strcontent: strclass Choice(BaseModel):index: intmessage: Messagefinish_reason: strclass APIResponse(BaseModel):id: strmodel: strchoices: List[Choice] # 这里明确指出choices是一个包含Choice对象的列表usage: Dict[str, int]def get_from_api():api_response = {"id": "chatcmpl-123","object": "chat.completion","created": 1677652288,"model": "gpt-4","choices": [{"index": 0,"message": {"role": "assistant","content": "你好!有什么可以帮助你的吗?"},"finish_reason": "stop"}],"usage": {"prompt_tokens": 9,"completion_tokens": 12,"total_tokens": 21}}return api_response# 2. 我们用这个定义好的结构来“解析”原始数据
raw_data = get_from_api() # 假设这里拿到了上面的字典数据
response_model = APIResponse.model_validate(raw_data)# 3. 输入 response_model. 就会看到 id, model, choices...类型是安全的
content = response_model.choices[0].message.content 

3 高效操作AI开发常见数据结构

在 AI 开发中,列表(list)和字典(dict)非常常见。我们来了解一下 Python 是如何利用其独有特性 —— 推导式(Comprehensions)高效操作它们的。

3.1 list推导式

假设我们有一个需求:给定一个数字列表,我们想要创建一个新的列表,只包含其中所有偶数的平方。

  • 传统的写法:
# 这是用传统循环方式实现的Python代码
numbers = [1, 2, 3, 4, 5, 6]
squares_of_evens = [] # 1. 初始化一个空列表
for number in numbers: # 2. 遍历原列表if number % 2 == 0: # 3. 判断条件squares_of_evens.append(number * number) # 4. 添加处理后的结果# 最终结果: [4, 16, 36]
  • 列表推导式
numbers = [1, 2, 3, 4, 5, 6]
squares_of_evens = [number * number for number in numbers if number % 2 == 0]# 最终结果: [4, 16, 36]

列表推导式的基本结构是:[<要执行的表达式> for <元素> in <可迭代对象> if <筛选条件>]
这个特性在数据处理中极为常用,比如清洗文本数据、筛选特定样本、转换数据格式等等。它不仅代码更短,通常执行效率也比手动 for 循环加 .append() 的方式要高。

  • 例子
    假设您从一个文本文件中读取了很多用户的评论,存放在一个列表 reviews 中。现在,您需要进行数据预处理。
reviews = ["这个产品太棒了!","不好用。","强烈推荐,物超所值!","有点小贵","物流很快"
]result = [review for review in reviews if len(review) > 5]

3.2 dict推导式

假设我们有一个列表,里面是产品名称。我们还有一个需求,要创建一个字典,其中 键(key) 是产品名称,值(value) 是这个产品名称的字符长度。

products = ["Laptop", "Mouse", "Keyboard"]# 期待字典为
{'Laptop': 6, 'Mouse': 5, 'Keyboard': 8}

使用字典推导式,可以这么写:

product_lengths = {product: len(product) for product in products}

结构{<键表达式>: <值表达式> for <元素> in <可迭代对象>}

使用推导式可以快速地转换list为dict,可以将后续查询的时间复杂度由O(n)变为O(1)。

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

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

相关文章

数据库char字段做trim之后查询很慢的解决方式

select * from TABLE0 where trim(column1):param 当表数据量大时&#xff0c;即使给column1字段加上索引&#xff0c;这条查询语句也会很慢。 因为使用trim函数后&#xff0c;column1的索引会失效&#xff0c;有两种处理方法&#xff1a; 1.给表加上trim(column1)函数索引 …

Kafka核心架构解析:从CAP理论到消息可靠性的设计哲学

摘要 本文从分布式系统CAP理论和消息可靠性两个视角深入解析Kafka的架构设计&#xff0c;通过概念关系图和组件交互图揭示其核心设计思想&#xff0c;并详细拆解各组件功能与协作机制。文章包含完整的交互流程分析和配置参数说明&#xff0c;是理解Kafka设计精髓的实用指南。 一…

LeetCode 275.H指数 II

题目&#xff1a; 给你一个整数数组 citations &#xff0c;其中 citations[i] 表示研究者的第 i 篇论文被引用的次数&#xff0c;citations 已经按照 非降序排列 。计算并返回该研究者的 h 指数。 h 指数的定义&#xff1a;h 代表“高引用次数”&#xff08;high citations&…

OV汽车摄像头cmos sensor 相关情况介绍

OV汽车摄像头cmos sensor 相关情况介绍 文章目录 OV汽车摄像头cmos sensor 相关情况介绍**1. 汽车摄像头三大场景应用****2. 车载CMOS SENSOR的核心技术****3. 两大车规认证:实现真正的车规可靠性****4. 最新产品**2022年,汽车智能化加码提速,被誉为“智能驾驶之眼”的车载摄…

Pinia在多步骤表单中的实践应用

引言 Pinia是Vue 3推荐的状态管理库&#xff0c;相比Vuex提供了更简洁的API、更好的TypeScript支持和更灵活的组合式风格。本文基于实际项目代码&#xff0c;详细介绍Pinia在多步骤表单场景中的应用方法。 1. Pinia Store的创建与设计 1.1 基础Store结构 在src/store/modul…

目标检测之YOLOV11的环境搭建

1 创建虚拟环境 conda create -n yolov11 python3.9 conda activate yolov112 安装ultralytics 默认是有cuda的情况下 # Install all packages together using conda conda install pytorch torchvision conda 还不能直接安装ultralytics&#xff0c;需要通过pip进行安装 …

Android 构建配置中的变量(通常在设备制造商或定制 ROM 的 AndroidProducts.mk 或产品配置文件中定义)

以下是 Android 构建系统中常见的用于产品配置、资源复制和构建规则的变量 1. PRODUCT_COPY_FILES 作用&#xff1a;指定需要从源码树复制到镜像的文件。示例&#xff1a;PRODUCT_COPY_FILES \device/manufacturer/device_name/file.conf:$(TARGET_COPY_OUT_VENDOR)/etc/file…

火山引擎项亮:机器学习与智能推荐平台多云部署解决方案正式发布

资料来源&#xff1a;火山引擎-开发者社区 2022年7月20日&#xff0c;火山引擎2022 Force原动力大会在北京诺金酒店成功举办。在上午的议程中&#xff0c;《推荐系统实践》一书的作者、同时也是火山引擎机器学习系统负责人——项亮&#xff0c;展开了题目为《开放AI基建&#x…

NVR的方法多种取决于应用场景

摄像头接入NVR&#xff08;网络视频录像机&#xff09;的方法通常取决于具体的应用场景和设备支持的功能。 一、通过局域网接入 设备连接 &#xff1a; 将摄像机通过网络线缆连接到NVR的对应端口&#xff0c;或者将摄像机和NVR都连接到同一个路由器/交换机上&#xff0c;确保它…

JAVA从入门到精通一文搞定

博主介绍&#xff1a; 大家好&#xff0c;我是想成为Super的Yuperman&#xff0c;互联网宇宙厂经验&#xff0c;17年医疗健康行业的码拉松奔跑者&#xff0c;曾担任技术专家、架构师、研发总监负责和主导多个应用架构。 近期专注&#xff1a; DeepSeek应用&#xff0c;RPA应用研…

火山引擎发布大模型生态广场MCP Servers,LAS MCP助力AI数据湖构建

资料来源&#xff1a;火山引擎-开发者社区 近日&#xff0c;火山引擎发布大模型生态广场—— MCP Servers&#xff0c;借助字节跳动生态能力&#xff0c;通过“MCP Market&#xff08;工具广场&#xff09; 火山方舟&#xff08;大模型服务&#xff09;Trae&#xff08;应用开…

NodeJS 对接 Outlook 发信服务器实现发信功能

示例代码&#xff1a; const express require(express); const nodemailer require(nodemailer); const querystring require(querystring); const axios require(axios);const app express(); app.use(express.json());const transporter nodemailer.createTransport({…

【同声传译】RealtimeSTT:超低延迟语音转文字,支持唤醒词与中译英

把你说的话实时变成文字&#xff1a;RealtimeSTT 上手体验 想找一个真正好用的语音转文字工具吗&#xff1f;不用等说完一整段才出结果&#xff0c;也不用反复点击按钮。RealtimeSTT 这个开源项目能做到​​实时​​转录&#xff0c;你说一句&#xff0c;屏幕上几乎同时出现文…

【大模型lora微调】关于推理时如何使用 LoRA Adapter

假设你有两部分&#xff1a; 一个是原始大模型&#xff08;base model&#xff09; 一个是保存的 LoRA Adapter&#xff08;adapter_config.json adapter_model.bin&#xff09; 不合并的情况下推理方法 你可以用 peft 的方式加载 LoRA Adapter&#xff0c;推理时这样写&a…

谷歌时间序列算法:零样本预测如何重塑行业决策?

谷歌时间序列算法&#xff1a;零样本预测如何重塑行业决策&#xff1f; TimesFM 你是否曾面临这样的困境&#xff1f;—— ▸ 需要预测新产品销量&#xff0c;却苦于缺乏历史数据&#xff1b; ▸ 依赖传统模型&#xff08;如ARIMA&#xff09;&#xff0c;但调参耗时且泛化能力…

国产服务器【银河麒麟v10】【CPU鲲鹏920】部署Minio文件服务器

目录 准备工作操作步骤1. 确认挂载点状态2. 创建专用用户和目录3. 下载ARM版Minio到挂在盘4. 环境变量配置5. 更新Systemd服务配置6. 启动、重启7. 防火墙8. 访问验证9. 故障排查&#xff08;如服务未启动&#xff09;​ 结束 准备工作 环境要求&#xff1a;Linux虚拟机 操作…

解决: React Native android webview 空白页

Android react-native-webview 之前是正常的, 升级了 react-native / react-native-webview 等 之后, 就变成了空白页. 通过下面的修改, 可以修复, 回到正常的状态. 来源: https://github.com/react-native-webview/react-native-webview/issues/3697 注意 ts 文件一定要改,…

高中编程教学中教师专业发展的困境与突破:基于实践与理论的双重审视

一、引言 1.1 研究背景 在数字化时代&#xff0c;编程已成为一项基本技能&#xff0c;其重要性日益凸显。编程不仅是计算机科学领域的核心能力&#xff0c;更是培养学生逻辑思维、创新能力和问题解决能力的有效途径。高中阶段作为学生成长和发展的关键时期&#xff0c;开展编…

最小化联邦平均(FedAvg)的算法开销

一、通信开销最小化 FedAvg中服务器与客户端间的频繁参数传输是主要瓶颈&#xff0c;可通过以下方法优化&#xff1a; 1. 模型压缩技术 稀疏化&#xff1a;仅上传重要参数更新&#xff08;如Top-k梯度&#xff09; 实现&#xff1a;客户端本地训练后&#xff0c;保留绝对值最…

准备开始适配高德Flutter的鸿蒙版了

我们的Flutter项目在编译为鸿蒙的过程中&#xff0c; 遇到了各种插件不支持的问题。 大部分都能解决&#xff0c;或者用别的方式代替。 这个高德我真的是无语&#xff0c; 我们只能用高德 &#xff0c; 目前还没看到网上有人适配了鸿蒙。 那就我来干吧&#xff0c; 第一…