RSS Python星球 笔记

RSS Python星球

Planet Python 网站是一个星球网站,它聚合了来自各种来源的 Python 相关内容,包括博客、新闻网站和其他在线出版物。 该网站为个人提供了一个了解 Python 编程世界最新发展的集中点。网站上的内容包括教程、新闻、项目公告和关于各种 Python 相关主题的讨论。 用户可以访问该网站,以了解 Python 社区、新的发布、会议和使用 Python 编程语言的最佳实践。网站的目的是帮助推广和传播 Python 相关内容,从而促进 Python 社区的增长和发展。

笔记线程

EuroPython:六月通讯:演讲日程已发布

EuroPython 2026 会议将于一个月后在克拉科夫举行,完整的演讲日程现已在线公布。主题演讲嘉宾阵容已扩充,新增 William Woodruff、Marlene Mhangami 和 Imogen Wright,与先前公布的演讲者一同亮相。门票价格将于 6 月 26 日上涨,因此建议参会者在此日期前购票。无法亲临现场者,远程售票将于 6 月 15 日开始。今年是 EuroPython 成立 25 周年,将举办特别活动,包括抽奖赢取免费门票。其中一项竞赛征集最古老的 EuroPython 参会徽章,另一项则奖励分享最具影响力 EuroPython 经历的视频。Django Girls 将于 7 月 18 日举办一场关于 Python 和 Django 可访问性的工作坊。Women in Python 社区将于 7 月 16 日组织一场 5 公里跑步活动,以促进交流与友谊。现场志愿者申请正在审核中,预计于 6 月 13 日至 19 日通知结果。EuroPython 演讲者导览工作坊视频现已在 YouTube 上线,为演讲者提供实用建议。财务援助决定已发出,共提供 84 项资助,预算为 35,000 欧元。YouTube 频道正定期发布新内容,包括来自 PyCon US 的访谈。赞助展位名额几乎售罄,剩余机会请联系 [email protected]。Rust Summit 注册仍在进行中,该峰会探讨 Rust 与 Python 的交叉领域。EuroPython Society 也在 PyCon US 和 PyCon Italia 积极活动,展示自身形象并与社区互动。
CdXz5zHNQW_4pUpCNfA9x.png

Hugo van Kemenade:我很高兴重新加入主权科技奖学金计划。

作者热情地重新加入了主权科技 fellowship,此前已参与了其成功的 2025 试点项目。该 fellowship 为关键开源技术的维护者提供至关重要的资金支持。作者的参与使其能够专注于发布 Python 3.14 和 3.15 版本,同时开展导师指导与社区支持工作。一份全面的评估报告详细阐述了该项目的益处,包括作者的具体成就。 Python 3.14.0 的顺利发布显著得益于 fellowship 所提供的专属时间,使作者能够主动解决问题,并从容应对加速发布。作者有效指导了新的发布经理和 triager,通过社区参与和信息公开分享,促进了透明度。通过自动化改进和网站可访问性提升,对数千万用户产生了影响。 开发了一个 triage 仪表板,用于管理大量问题并回退关键安全修复,展现了显著的组织影响力。作者还倡导非技术性改进,成功提议在 PyCon US 和 EuroPython 之间交替举办语言峰会,以促进更大的多样性。这一组织工作涉及核心团队内经过充分讨论和提案的流程。 额外分配的自由时间既用于个人兴趣,也用于支持本地 Python 社区,促成了 meetups 的共同组织。fellowship 通过月度会议和线下活动,促成了宝贵的联系与知识共享。作者的广泛贡献包括大量 GitHub 提交、版本发布、会议演讲以及社区组织工作。展望未来,作者对扩展后的 2026 年 fellowship cohort 充满期待,该 cohort 将包括社区经理和技术作家。主权科技机构(Sovereign Tech Agency)的持续工作对于改善开源基础设施至关重要,并影响着新的欧盟倡议,如欧盟主权科技基金(EU Sovereign Tech Fund)。

scikit-learn:scikit-learn 1.9 版本:更优的数值计算与新核心功能

Scikit-learn 1.9 版本为现有机器学习模型带来了显著改进。易于观察的增强包括 Notebook 中更丰富的 HTML 显示,现在可展示拟合属性以及 ColumnTransformer 输出的特征名称。引入了一种新的实验性回调机制,允许在模型训练期间显示进度条并进行高级监控。该回调系统设计用于灵活跟踪进度,即使在并行计算环境中也是如此。初始阶段,回调功能适用于逻辑回归、SearchCV 对象、Pipeline 和 StandardScaler。该版本还专注于改进统计与数值计算,增强了 scikit-learn 例程在不同输入和建模选择下的可靠性。基于树的模型现在原生支持缺失值和单调约束。线性模型受益于逻辑回归中的 float32 支持以及 RidgeCV/ClassifierCV 的稳定性提升。scikit-learn 现在返回稀疏数组而非稀疏矩阵,以顺应 SciPy 实践的演变。GPU 支持正在扩展,逻辑回归、泊松回归以及特定指标已获得 GPU 加速。尽管用户与 GPU 后端的使用体验仍在发展中,但这为贡献者提供了重要的参与领域。scikit-learn 项目的发展依赖于志愿者的贡献以及资金赞助者的支持。
CdXz5zHNQW_uYWVeT7Rck.png

Talk Python to Me: #551:漫步创业大道——2026

本内容聚焦于 PyCon 上的 Startup Row,展示早期阶段的 Python 初创公司。组织者 Jason 和 Shay 讨论了该节目的起源,并提及了两家已成长为独角兽的校友公司。本期介绍了五家参与初创企业:Tetrix 为私募市场的机构投资提供人工智能解决方案;Arcjet 提供作为 SDK 的应用内安全服务;Phemeral.dev 专注于为 Python Web 应用提供无服务器托管;CapiscIO 旨在为 AI 代理构建身份与权威系统;Pixeltable 是由 Apache Parquet 共同创建者 Marcel Kornacker 开发的多模态数据库。文本鼓励听众识别这些初创公司之间的共同主题。此外,还列出了本期节目的赞助商,并提供了嘉宾、公司及节目相关内容的链接。最后,包含该节目及其主持人的社交媒体链接。

Real Python:测验:使用 Python 序列化您的数据

在本测验中,您将检验自己对“使用 Python 序列化数据”这一主题的理解。 通过完成本测验,您将重温如何选择文本格式与二进制格式、何时使用模式(schema),以及如何安全有效地应用 pickle、json、csv 模块、Parquet 和 Protocol Buffers 等工具。

PyCharm:2026 年最佳 Python AI 框架

选择合适的 AI 框架对于成功实施人工智能和机器学习项目至关重要。Python 在该领域占据主导地位,拥有成熟的配套框架生态系统。理想框架的选择取决于具体项目需求,例如生产系统与研究原型之间的差异。AI 框架通过提供用于复杂数学和计算操作的预构建库来简化开发。这些框架通常分为三大类:深度学习框架、经典机器学习框架以及大语言模型(LLM)/AI 代理框架。AI 框架能够加速开发进程,提供社区支持,提供生产就绪的工具,并针对 GPU 等硬件进行优化。开源框架占据主导地位,提供创新、透明度和成本效益,而商业平台通常构建在这些开源工具之上。TensorFlow 由 Google 开发,是一个可扩展的深度学习框架,适用于企业级应用及跨多种设备的部署。Scikit-learn 是一个用于结构化数据经典机器学习的必备开源库,提供用户友好的 API 和全面的算法。PyTorch 来自 Meta,是一个灵活的深度学习框架,因其 Pythonic 特性和动态计算图而在研究中备受青睐。Keras 是一个专为快速深度学习实验设计的高级 API,以其简洁性和多后端支持而闻名。LangChain 是一个开源框架,旨在构建由大语言模型驱动的应用程序,简化 LLM 与外部数据和工具的集成。
CdXz5zHNQW_dXsJvecBsg.png

Seth Michael Larson:代码审查中 linting 很重要:附屏幕截图

今天我在审查一段 Python 代码的拉取请求时,发现 diff 中有一个分号。 截图如下,众所周知,这是在互联网上分享文本的最佳方式: 我正准备留言,但随后稍微向下滚动页面…… 啊。是时候清理我的笔记本电脑屏幕了…… 🧼🫧 感谢阅读 ♥ 我很想听听您的想法!可通过 Mastodon、Bluesky 或电子邮件联系我。浏览博客归档。查看我的博客链接。
CdXz5zHNQW_a1VfJgW90G.jpeg

Django 博客:DSF 2026 筹款目标

Django 的生态系统庞大,被全球众多组织和关键基础设施广泛使用。Django 软件基金会(DSF)支持该生态系统,但其运作依赖资金。今年,DSF 设定了雄心勃勃的筹款目标:50 万美元,以确保 Django 的持续健康与可持续发展。从 30 万美元增至 50 万美元,是为了将每月经常性捐款从 9,000 美元提升至约 15,000 美元。这些捐款用于支持至关重要的 Django Fellows 计划,该计划负责开发任务,如工单筛选和安全问题处理。此外,资金还支持商标管理、djangoproject.com 的基础设施、DjangoCon 会议及区域活动的资助,以及社区项目如 Django Girls 和 Djangonaut Space。增加的经费还将使基金会能够聘请一名执行董事,提供专职领导并扩大筹款工作。新的举措,如“赞助 Fellows"企业会员计划,为组织提供了一种直接且可见的投资 Django 未来的方式。企业会员和来自个人的捐款(包括雇主匹配和 GitHub Sponsors)对于实现目标至关重要。对于无法进行财务捐赠的人士,传播相关信息也是一种宝贵的贡献。DSF 通过发布月度财务快照保持透明度,目前运营储备金约为 222,000 美元。此次增加筹款对于稳定性、可持续性,以及确保所有依赖该项目者的未来成功至关重要。

Mike Driscoll:如何使用 Python 获取 TIFF 元数据”

本文介绍如何使用 Python 的 Pillow 库从 TIFF 图像文件中提取元数据。继之前关于 JPG EXIF 数据的说明之后,本指南引入了一种处理 TIFF 元数据的方法。文中提供了一个名为 `tiff_metadata.py` 的 Python 脚本以演示该过程。该脚本从 `PIL.TiffTags` 导入 `TAGS` 字典,用于解释 TIFF 标签信息。`get_metadata` 函数打开一个 TIFF 文件并遍历其标签,随后利用 `TAGS` 字典将数值型标签 ID 映射为可读的标签名称。提取的元数据被存储在一个字典中并返回。示例输出展示了多种 TIFF 标签,包括图像尺寸、压缩详情、分辨率和软件信息等。本文指出元数据值以元组形式返回,并建议读者尝试清理这些数据。理解并访问图像元数据能够支持诸如图像缩放和文件排序等编程任务。本文鼓励读者进一步探索 Pillow 在图像处理方面的功能,并提及了一本相关主题的书籍。
CdXz5zHNQW_2cKxZqZ5Kc.png

Python 小语:Python 中的栈与队列

栈和队列是计算机科学中的基本数据结构。它们旨在高效地移除最近添加或最早添加的项目。队列遵循先进先出(FIFO)原则,类似于排队等候。放入队列的第一个项目是第一个被移除的项目。相反,栈遵循后进先出(LIFO)原则。这类似于盘子堆叠,最上面的盘子是第一个被取走的。在编程中,栈中最后添加的项目是第一个被检索的项目。Python 提供了实现栈和队列的方法。对于栈操作,可以利用标准的 Python 列表。这利用了列表固有的 append 和 pop 方法。对于队列操作,推荐使用 `collections` 模块中的 `deque` 对象。`deque` 提供了从结构两端进行高效 append 和 pop 操作的能力。

Real Python:Cursor 与 Windsurf:哪种 AI 代码编辑器最适合 Python?

AI 驱动的代码编辑器正通过将 AI 直接集成到工作流中,重塑 Python 开发。Cursor 和 Windsurf 是两款突出的 VS Code 分支,提供了这种无缝集成。尽管两者均导入 VS Code 设置并采用先进的 AI 模型,但在代码修改方式上存在显著差异。Cursor 以用户控制为核心,在应用前将 AI 生成的更改以可审查的差异(diff)形式呈现,并依赖明确的规则来指导 AI 行为。 相比之下,Windsurf 强调流畅性,直接在编辑器中应用编辑,并利用更广泛的上下文(包括终端输出和对话历史)来引导其操作。对这两款编辑器的比较将涵盖 AI 代码补全、代理式多文件编辑以及调试能力。Cursor 适合偏好在使用前审查更改的用户,而 Windsurf 则适合希望 AI 在全面的工作空间上下文中直接应用编辑的用户。 Cursor 提供更快速、逐行的 AI 代码补全,且资源占用更轻,适用于较小的代码库。Windsurf 则提供更具结构意识的跨关联文件补全,并利用语义地图进行索引,有利于大型项目,但初始资源需求更高。两款编辑器均提供每月 20 美元的付费计划,并设有免费试用层级以供探索。两者的安装过程均十分简便,仅需下载应用程序,并可选择导入 VS Code 配置。
CdXz5zHNQW_AAH5sMMiqO.jpeg

Python GUI:如何在 QTableView 中设置行背景色——使用 Qt 的 BackgroundRole 根据数据为整行着色

要在 QTableView 中直观地指示设备状态,可以通过自定义模型的 data() 方法来高亮整行。QTableView 视图会为每个单元格查询模型的各种数据角色,包括 Qt.BackgroundRole。当模型在请求 Qt.BackgroundRole 时,根据该行数据中的条件从 data() 方法返回一个 QColor,即可设置背景色。关键在于,该颜色会应用于该行中的所有单元格,因为 data() 方法会被每个单元格调用,且颜色决策不依赖于列索引。示例通过为“NewConnection"状态行设置蓝色、为"Registered"状态行设置绿色来演示这一点。为确保彩色背景上的文本可读性,您还可以处理 Qt.ForegroundRole 并返回对比鲜明的文本颜色。如果数据动态变化,必须从模型中发出 dataChanged 信号,以提示视图重新渲染并显示更新后的行颜色。这种方法提供了一种清晰、基于数据的高亮 QTableView 行的方案。

Armin Ronacher:煤气灯式开放”

我一直长期坚定支持开源,并曾尝试为其提供资金支持。我深信开源理念最终必将获胜,但这一胜利并非自动实现,也非一蹴而就。当前,开源正面临人工智能垃圾内容(AI slop)、贡献者格局转变、代码生产成本下降以及大型公司学会关上大门等多重压力。 当今这场斗争的核心之一在于叙事操纵。社交媒体和商业圈的意见领袖日益将“访问权”框架为“不负责任”。正因如此,欧盟《数字市场法案》(DMA)才具有重要意义,尽管许多人(包括我自己)本能地反感欧盟监管。苹果在欧洲推迟人工智能功能的争议,并非仅仅因为布鲁塞尔令人恼火:关键在于用户是否能够访问自己的设备和数据。手机属于你,数据也属于你,但苹果却决定谁能触及它们,剥夺了你的自主权,随后又试图将此举描绘成符合你的利益(声称是为了你的安全与保障)。 越接近人工智能的核心,这一问题就越凸显。Anthropic 有充分的经济动机限制人们对其 Mythos 和 Fable 模型的使用,并将这些限制包装在安全与(国家)安全的话语之下。部分限制或许可以辩护,但并非全部如此。这些模型是在公共作品基础上训练的,却阻止开源社区对其进行学习与提炼。 对欧盟、中国或其他任何大型政府持批评态度,不应让我们忘记:真正的技术民主化访问,包括人工智能,符合我们所有人的利益。某些暂时的产品痛点,包括苹果人工智能功能的延迟,若有助于保持门户开放,则值得付出代价。我们不应让公司垄断“限制访问符合我们利益”的叙事,尤其是对于欧洲而言,我们的资本市场尚不发达、人才外流以及内部纷争,已使局势对我们不利。

Seth Michael Larson:不安全的代码补全是否构成漏洞?”

一个名为"Full Line Completion"的 PyCharm 插件使用本地深度学习模型来建议整行代码。作者测试了该功能,发现其建议了不安全的代码片段。最初,该插件建议在使用 urllib3 时禁用对不安全请求的警告;随后,它又提出禁用证书验证,这将使应用程序暴露于中间人攻击之下。作者将此行为报告给 JetBrains,JetBrains 认为这并非“直接的安全漏洞”。然而,JetBrains 依据其协调披露政策,要求作者不要公开该报告。在等待 90 天后,作者发现在新版本的插件中该行为仍未改变。作者认为此类问题存在于各类代码生成模型中,本身并不构成符合 CVE 收录标准的安全漏洞。尽管如此,作者主张必须在源头解决这些不安全建议,以防止用户无意中接受存在漏洞的代码。作者希望社区对此类代码生成模型中的问题发表看法。

PyCoder 周报:第 738 期:sleep()、Polars 工作流、迭代器及其他(2026-06-09)

本期 PyCoder's Weekly 涵盖广泛的 Python 主题。文章详细介绍了如何使用 `sleep()` 函数在 Python 代码中实现时间延迟,并探讨了用于增强 Polars DataFrame 工作流的库。赞助内容介绍了 PropelAuth,用于安全的 B2B AI 代理集成。本期深入探讨迭代器,特别是追踪其迭代路径,并宣布与 HTML 仓库、类型系统以及推导式解包相关的已接受和最终版 Python 增强提案(PEPs)。Python 3.15.0b2 已发布,Django 安全更新也已提供。本通讯对比了 olmOCR-2 和 PaddleOCR-VL 的 PDF 表格提取能力。文章讨论了在 Python 中使用类型注解如何影响代码结构,并介绍了一个用于新 Integrity-Policy 头部的 Django 库。Python 软件基金会 2026 年战略计划的草案已发布,供社区反馈,同时突出了 EuroPython 2026 语言峰会的演讲内容。文章解释了通过引用计数追踪 Python 对象生命周期以及移除 GIL 的影响。针对使用 GitHub Copilot 等 AI 代码生成工具时如何保持开发者直觉提供了建议,并包含关于其拉取请求审查功能的测验。本通讯还指导如何解析 .avif 文件中的 EXIF 数据以及有效构建 Python 脚本。最后,列出了多个新发布和更新的 Python 项目以及即将举行的 Python 相关活动。
CdXz5zHNQW_zBtxJLoMoZ.png

Real Python:通过 OpenRouter API 访问多个 AI 模型

从单个 Python 脚本调用多个 AI 模型的最快捷方式之一是使用 OpenRouter 的 API,它在您的代码与多个 AI 提供商之间充当统一的路由层。到本课程结束时,您将能够通过一个统一的 API 访问来自多个提供商的模型。 这种便利性至关重要,因为 AI 生态系统高度碎片化:每个提供商都提供自己的 API、认证方案、速率限制和模型阵容。与多个提供商合作通常需要额外的设置和集成工作,尤其是在您希望尝试不同模型、比较输出或针对特定任务评估权衡时。 OpenRouter 让您能够访问来自 OpenAI、Anthropic、Mistral、Google 和 Meta 等领先提供商的数千个模型。您可以在不更改应用程序代码的情况下在这些模型之间切换。

Real Python:测验:使用 ChromaDB 进行嵌入与向量数据库

在本测验中,您将检验自己对嵌入(Embeddings)和基于 ChromaDB 的向量数据库的理解。 通过完成本测验,您将重温关键概念,包括向量、余弦相似度、词嵌入与文本嵌入、ChromaDB 集合、元数据过滤以及检索增强生成(RAG)。

Real Python:测验:使用 OpenRouter API 访问多个 AI 模型

在本测验中,您将检验对使用 OpenRouter API 访问多个 AI 模型的理解。 通过完成本测验,您将重温 OpenRouter 如何提供统一的路由层,如何从单个 Python 脚本调用 AI 模型,如何在智能路由与指定模型之间切换,如何设置提供商优先级,以及如何添加模型回退机制以确保可靠性。 此外,本测验还将强化您在为特定用例选择模型时,如何权衡成本、延迟和质量等关键因素。

Python Bytes: #483 谢谢你,Brian

本集讨论了与 Python 开发相关的几个关键主题。Calvin 介绍了 uv(一个 Python 包管理器)的最新更新,现已包含漏洞和恶意软件检查功能。这些检查会扫描依赖项以查找已知漏洞和主动恶意的包,其中恶意软件扫描为可选的预览功能。随后,Michael 将焦点转向 HTTP GET 请求,指出尽管 requests 和 httpx 等库广受欢迎,但 Python 标准库可能是一个更轻量且潜在更安全的选项,尤其适用于 AI 代理。 Calvin 接着讨论了一个关键漏洞"BadHost",该漏洞影响 Starlette ASGI 框架,而该框架是许多流行的 Python 库(如 FastAPI 和 vLLM)的基础。若该漏洞被利用,可能导致凭证窃取和远程代码执行,尤其对存储敏感凭证的 AI 代理服务器影响显著。修复方案已提供,并附带一个扫描器用于检查易受攻击的版本。讨论还触及开源可持续性的挑战,维护者往往在业余时间独自处理安全报告。 Michael 介绍了 alembic-git-revisions 工具,该工具可根据 Git 提交历史自动编排 Alembic 数据库迁移链,解决多头部修订版本这一常见问题。Calvin 分享了一个"Extras"技巧,关于 GNU make 在目标中模式匹配的能力,而 just 和 task 等工具目前尚不支持。Michael 还提到他将多个 HTTP 客户端迁移至 httpx2。本集以一则笑话结束,并向主持人和嘉宾致谢。

Real Python:Python 3.15 进入特性冻结阶段及其他 2026 年 6 月新闻

Python 3.15 已进入 Beta 1 阶段,即将确定其即将发布版本的特性集。一项重大新增是引入了新的内置哨兵对象,用于标准化区分“未提供值”与“空值”的常见模式。该由 PEP 661 定义的新哨兵对象,相较于之前的自定义方案,提供了更好的表示形式和类型注解兼容性。Python 3.15 确定的其他关键特性包括:显式惰性导入以加快启动速度,以及通过 `frozendict` 实现的不可变字典。解包操作在推导式中的应用,以及 UTF-8 作为默认编码,也已确认将在新版本中实现。Python 3.15 还引入了自由线程构建的稳定 ABI,并更新了其 C API 以提升扩展兼容性。标准库中将新增一个采样分析器,用于提供低开销的性能分析。即时编译器(JIT)的性能得到了提升,开发者被鼓励在 Beta 构建版本上测试其代码。此外,人工智能在识别和修复 Python C 扩展及 Firefox 中的众多缺陷方面发挥了重要作用。另有一则消息,Pydantic 已分叉 httpx,这在生态系统治理方面引发了有趣的进展。

死亡与重力:在DynamoDB中订购密钥分片

本文探讨了在 DynamoDB 中为超出单个分区容量的数据创建排序索引的解决方案。最初,稀疏索引看似可行,但无法提供有序的扫描结果。使用带有专用分区键和排序键的单一索引集合虽能提供排序,但因吞吐量需求过高而面临限流问题。基于随机后缀的分片解决了吞吐量问题,却破坏了基于标题的查询。对后缀进行哈希处理虽能解决标题查询问题,但牺牲了跨分片的字母顺序排序。 使用标题的首字符作为分片 ID 会导致因 Unicode 多样性而产生不可管理的分片数量。采用 UTF-8 编码的首字节是一种糟糕的折衷方案,存在分布不均和单字节溢出的风险。随后考虑了基于符合单个分区限制的前缀进行分片,但该方案较为复杂。最稳健的解决方案是利用预计算的前缀边界将排序后的标题划分为相等范围,并对相同标题添加随机后缀。然而,前缀分布随时间动态变化构成了挑战,这需要谨慎的初始分片规划或潜在的索引迁移。

Wingware:Wing Python IDE 12 早期访问版 - 2026 年 6 月 8 日

Wing 12 现已作为早期访问版本发布,主要聚焦于 AI 代理驱动的开发。该版本引入了与 Claude Code 的深度集成,并配备了专用的 Claude Code 工具。新增的 Tasks 工具用于管理 AI 代理工作的规划、执行与审查。Wing 12 还包含 MCP 服务器,使代理能够访问 Wing 的源代码分析、单元测试和调试器,从而提升效率。IDE 现在支持并发管理多个 AI 代理,其功能已超越直接的代码开发。Wing 所有既有的 IDE 功能,包括调试器和代码分析,均完全可用。Wing 12 增强了 OS Commands 和 Debug I/O,提供真正的伪终端支持。OS Commands 工具已重新设计,以简化命令管理。此外,还进行了多项组织性改进,包括重新组织的 Tools 菜单以及改进的 Preferences 对话框导航。其他增强功能包括自动测试发现、更快的文件修改检测,以及多项其他优化。
CdXz5zHNQW_AJVXl56uo5.png

阿尔明·罗纳谢尔:非社区

围绕禁欲形成的社群,其身份认同往往植根于对所谓“被拒之物”的反对。尽管这些群体可以倡导自主或更安全的社区等积极理念,但对被拒之物的关注可能变得吞噬一切。此类批评常从健康的讨论升级为管控乃至 outright 仇恨。那些曾看似与社群一致却偏离其核心原则的个体,往往遭受公开羞辱与排斥。这种羞辱可能包括歪曲其观点,将其描绘为不真诚或欺诈。作者承认此类负面性的吸引力,因其自身也曾亲历。找到拥有相似不安全感的群体固然令人慰藉,但也存在集体骚扰的风险。作者建议暂停、降温,并避免对他人的行为做出最负面的解读。他们鼓励以开放的心态对待新思想与新体验。归根结底,将身份建立在负面之上是一个具有欺骗性且有害的陷阱。作者援引不同社群的实例来阐明这一普遍模式,其中近期针对"rsync"的反噬便是当代的一个例证。

威尔·卡恩-格林:《Bleach》6.4.0 版本发布——最终版

Bleach 是一个 Python 库,旨在安全地清理和链接不可信文本,以便在 HTML 中使用。最终版本 6.4.0 包含安全修复和依赖更新。该项目现已终止,因为其核心依赖 html5lib 不再积极维护。Bleach 的唯一维护者因时间限制及其问题领域的复杂性,无法继续支持该项目。该项目将 html5lib 打包进自身(vendoring)的不可持续做法促成了这一决定。在其 16 年的生命周期中,Bleach 共发布了 64 个版本,并获得了约 80 名贡献者的参与。仍在使用 Bleach 的用户有三种推荐的后续方案:终止项目、改用清理器 API,或迁移到新库 justhtml。该项目感谢了关键贡献者及其在开发及最终迁移路径中的贡献。最后一次提交标志着 Bleach 项目在超过十六年的服务后正式结束。
CdXz5zHNQW_uLowUrgbBR.jpeg

EuroPython 协会:EuroPython 协会亮相 PyCon US 2026

该组织参加了在加利福尼亚州长滩举办的 PyCon US,认为此次活动极具价值。一个关键亮点是其展位,促进了与 Python 社区的连接。他们与参会者就多个主题进行了交流,包括 EuroPython 及其资助计划。展位上拍摄的对话内容将在其 YouTube 频道发布。该组织还回顾了 EuroPython 成立 25 周年,分享了长期参会者的鼓舞人心的故事。PyCon US 同时也成为表彰社区成员的场合:Maria Jose Montreas-Colina 因其社区工作荣获杰出 PyLady 奖;Rodrigo Girão Serrão 因其贡献被授予社区服务奖。长滩宜人的环境,棕榈树与近海景观,为此次体验增添了积极氛围。他们向 PyCon US 组织者以及所有访问其展位的同仁表示感谢。该组织期待明年的 PyCon US 以及 2026 年在克拉科夫举办的 EuroPython。
CdXz5zHNQW_7ZTyXx1HJV.jpeg

Bob Belderbos:如何从一个 htmx 请求更新多个页面元素

一个 Web 应用程序出现了一个问题:提交按钮触发了代码测试并正确显示了反馈,但过往提交的下拉列表却未更新。新提交已保存至数据库,但在不刷新页面的情况下,下拉列表未能反映这一变化。这带来了一个挑战:单个请求需要更新页面的两个不同部分——反馈区域和提交下拉列表。 最初考虑使用 JavaScript 手动更新下拉列表,但因需复现服务器端逻辑以管理下拉列表的状态(包括去重和排序),该方案因复杂性而被放弃。解决方案是利用 htmx 的带外(OOB)交换功能。该功能允许将响应中的内容交换到与主要目标不同的 DOM 部分。 提交下拉列表的选项被提取为可复用的 HTML 片段。该片段由 Django 视图渲染,生成的 HTML 被标记为带外交换。响应中既包含针对指定反馈 div 的反馈内容,也包含被指示交换至提交下拉列表的更新后选项。 Htmx 自动检测到带外交换属性,并将提交选项应用至正确的元素,从而在不发起额外请求或进行复杂客户端脚本的情况下有效更新了下拉列表。类似的方法也用于进度条,展示了带外交换在通过单个服务器响应更新多个页面元素方面的灵活性。虽然此方法增加了重新获取提交的额外数据库查询,但它通过将更新逻辑集中到服务器端视图中显著简化了代码库。这种方法通过确保数据获取和渲染逻辑保持一致,提升了可维护性。
CdXz5zHNQW_TAR8wLPqpV.png

塞斯·迈克尔·拉森:《任天堂明星大乱斗 X》中的甜甜圈是来自 Mister Donut 的吗?

正在庆祝甜甜圈日,网上出现了一款巧克力圈甜甜圈。这款甜甜圈与《超级 Smash 兄弟》和《星之卡比 飞天赛车》游戏中的某款极为相似,尤其是与《超级 Smash 兄弟 Brawl》中登场的甜甜圈高度相似。作者承认巧克力圈甜甜圈通常外观相近,但认为这种相似性尤为显著。有趣的是,Render96 维基——一个记录《超级 Smash 兄弟》美术作品来源的资源——将该甜甜圈的出处列为未知。这引发了一个问题:这款特定的甜甜圈设计是否可能源自 Mister Donut?作者推测,这一谜团恐怕仍将无解。作者感谢大家持续使用 RSS,并邀请读者通过 Mastodon、Bluesky 或电子邮件分享看法,承诺予以回复。最后,作者建议浏览博客归档、博客链接列表,或干脆出门走走。

Python 编程栈:深入迭代器兔子洞

Python 迭代器可以像街头接力游戏一样进行链式调用,但无需欺骗。迭代器是轻量级对象,按需获取数据,构成一个单向流,每个项目仅被产出一次。创建链式结构始于一个可迭代对象(如列表),从中派生出第一个迭代器。后续的迭代器(通常是生成器表达式)可基于链中的前一个迭代器构建。链中的每个迭代器都指向其前驱的下一个项目。当下游迭代器请求一个值时,会触发对前一个迭代器的请求,依此类推,直至原始数据源。此过程按顺序消耗原始源中的项目。若在链的不同位置对不同的迭代器调用 `next()`,若理解不当可能导致意外结果。从同一源创建的独立迭代器彼此分离,互不影响。为避免混淆,通常建议仅从链式结构中的最后一个迭代器消费数据。理解数据如何在这些链式迭代器中流动,对于实现可预测的行为至关重要。
CdXz5zHNQW_U1drSGJuaw.png

Real Python:测验:如何在 Python 中从键盘读取用户输入

在本测验中,您将检验对“如何在 Python 中从键盘读取用户输入”这一主题的理解。 通过完成本测验,您将重温 input() 函数、类型转换、使用 try 和 except 进行错误处理、使用 getpass 模块实现隐藏输入,以及使用 PyInputPlus 库进行自动验证。

Python 软件基金会:2026 年战略计划草案:面向社区征求意见”

Python 软件基金会(PSF)已发布其《2026 年战略规划》完整草案,征求社区意见。该详细规划进一步扩展了此前分享的高层目标。意见反馈窗口开放至 2026 年 6 月 25 日,全球任何地点均可参与。PSF 董事会将审阅所有提交的意见,以完善规划最终版本,随后可能进行采纳投票。完整草案包含针对项目目标的具体战略举措,以及针对组织目标的战术思路,这些均为讨论的起点。在 PyCon US 上,社区频繁提出关于财务可持续性的关切。尽管 PSF 目前财务状况稳定,但该组织承认需要进行有意义的调整。透明披露 PSF 的财务前景及其与战略规划之间的关联是首要任务。在此反馈期内,PSF 希望社区聚焦于方向与目标,而非实施细节。详细或私密意见可通过电子邮件发送至 [email protected] 提交;同时设有公开讨论线程,供更广泛的交流。此外,PSF 董事会将在 Discord 上举办办公时间(Office Hours),以便进一步讨论。您的意见对于塑造 PSF 审慎且富有目的性的发展方向至关重要。

Adrarsh Divakaran:用 Python 构建 AI 智能体

AI 智能体代表了人工智能领域的重大进步,其能力已从简单的问答延伸至执行具体任务。与仅能对话的聊天机器人不同,智能体能够执行诸如浏览网页、读取文件和运行代码等任务。它们通过逐步利用多种工具来推进目标达成。构建这些智能体需要理解其核心组件:大语言模型(LLMs)作为推理引擎、系统提示(system prompts)用于定义行为、以及上下文窗口(context windows)用于信息处理。记忆对于智能体在多次交互中保持信息至关重要。智能体循环(agent loop)统筹了思考、行动、观察和决策的过程。工具调用使智能体能够与外部函数交互,而模型上下文协议(MCP)和技能(skills)则提供了标准化与可复用性。LLMs 基于海量数据集训练,处理输入与输出文本,构成了智能体背后的智能。它们存在局限性,主要包括缺乏实时知识以及无法在无工具支持下自主行动。LLM 的选择需在基准表现、成本、推理能力与部署选项之间取得平衡。系统提示对于引导智能体行为及设定边界至关重要,而上下文窗口则决定了智能体单次可处理的信息量。
CdXz5zHNQW_pd2Z13tY0S.png

核心调度:核心调度 #5

Python 3.15.0 beta 2 于 6 月 2 日发布,3.13 和 3.14 的后续里程碑定于 6 月 9 日。Python 3.15.0 beta 3 预计将于 6 月 23 日发布。3.15 的重大变更包括修复 unicodedata.normalize() 的性能问题,以及增强 XML 解析器对多字节编码的支持。已在 ast 模块和 abc 中的特定抽象方法中引入弃用警告。Python 安全响应团队已在 Devguide 中发布了初步安全策略。3.15 及更高版本的开发构建现已采用符合 PEP 440 的版本字符串,例如 3.15.0b2+dev。EuroPython 2026 语言峰会主题已公布,涵盖 CPython 的 Rust 路线图、自由线程和垃圾回收。Victor Stinner 撰写了一篇关于自由线程内部机制和引用计数的深入文章。鼓励用户测试 3.15 beta 版本并报告任何问题。其他新闻包括 PEP 更新、解决各种功能的合并拉取请求,以及关于多个 Python 增强提案的持续讨论。

Bob Belderbos:'Rust 是给那些想受罚的人准备的。' 如今,Jochen 却比 Python 更信任它。

Jochen Deister 是一名职业律师,他发现了 Rust 并意外地对其严谨性感到愉悦。起初,他因 Rust 陡峭的学习曲线而感到 intimidated,于是决定从头构建一个 JSON 解析器作为个人挑战。该项目历时六周完成,其解析器在基准测试中 consistently 优于 Python 标准库。Deister 认为 Rust 编译器是无价指南,其错误信息为优化提供了清晰的方向。他欣赏 Rust 的美学特质,包括其可读性以及编写清晰、惯用代码所带来的满足感。故意破坏代码并利用编译器错误进行修复的经历,被证明是一种高效的学习方法。性能分析揭示了意想不到的性能瓶颈,促使他进行数据驱动的优化。这段旅程使 Rust 成为他新项目的首选编程语言。Deister 如今对编程基础有了更深入的理解,甚至因 Rust 经验而提升了 Python 编码能力。他尤其喜爱 Rust 的模式匹配特性,经常探索其高级功能。他 newfound 的欣赏源于 Rust 的诚实性及其如何鼓励更严格、更审慎的思考。Deister 计划继续他的 Rust 之旅,通过移植现有的 Python 项目并在该语言中开发新工具。

PyCon Ireland:投稿截止日期推迟至 2026 年 7 月 31 日”

PyCon Ireland 2026 提案征集截止日期已提前至 2026 年 7 月 31 日,原定为 8 月 30 日。此次调整旨在为程序委员会和潜在演讲者提供更充足的时间以完成各自的任务。程序委员会需要足够的时间对大量提案进行彻底审查与比较,以构建一个均衡的日程。将截止日期提前,使他们能够在非匆忙的情况下进行审慎决策。对于演讲者而言,更早确认录用意味着有更多时间规划前往都柏林的行程,包括预订机票、住宿以及安排休假,从而可能降低压力与成本。Sessionize 上的提交页面已更新以反映新的截止日期。录用演讲者将更早收到通知,使其能提前更长时间安排行程。提案征集仍欢迎所有经验水平的参与者提交涵盖广泛主题的提案。接受 30 分钟完整演讲和 5 分钟闪电演讲。会议定于 2026 年 10 月 17 日举行。有意者可通过提供的页面提交提案,或联系 [email protected] 咨询任何问题。

Real Python:如何在拉取请求中使用 GitHub Copilot 代码审查

GitHub Copilot 提供人工智能驱动的工具,以增强整个开发工作流,包括代码审查。它可以作为拉取请求(pull request)的人工智能审查员,快速提供上下文感知的反馈。这解决了人工代码审查中常见的不一致性和延迟问题。Copilot 的建议具有可操作性,只需几次点击即可应用,从而在合并前提升代码质量。要使用此功能,用户需要熟悉 Git 和 GitHub、GitHub CLI,并拥有付费的 GitHub Copilot 订阅。学生、教师和开源贡献者可能享有免费访问权限。此外,GitHub Copilot Pro 还提供为期 30 天的免费试用选项。本教程利用一个示例 FastAPI 测验应用程序项目来演示人工智能辅助的代码审查。用户可以下载示例代码并上传至其 GitHub 账户进行练习。示例仓库包含一个带有故意问题的分支,供 Copilot 识别。GitHub CLI 可与 Git 命令结合使用,高效地创建仓库并推送分支。

Real Python:测验:如何在拉取请求中使用 GitHub Copilot 代码审查

在本测验中,您将检验自己对《如何在拉取请求中使用 GitHub Copilot 代码审查》的理解。 通过完成本测验,您将重温如何向 Copilot 请求审查您的拉取请求、接受或驳回其建议、配置自动审查,以及使用自定义指令使 Copilot 的反馈符合团队的规范。

Django Weblog:发布 Django 安全更新:6.0.6 和 5.2.15

Django 团队已发布针对 Django 6.0.6 和 Django 5.2.15 的安全更新。这些版本修复了五个低严重程度的安全问题。其中一个漏洞涉及签名 Cookie,不同的名称和盐值对可能导致命名空间冲突,从而允许 Cookie 在不预期的上下文中被接受。另一个问题涉及 SMTP 后端在使用 STARTTLS 进行未加密邮件传输时,若握手失败可能引发的风险。此外,三个与缓存中间件和装饰器相关的漏洞可能导致私有数据泄露,其中包括对大小写敏感的 Cache-Control 指令的处理问题、缺少 Vary: Authorization 响应头,以及 Vary 响应头中的空白填充问题。这些漏洞的补丁已应用于 main、6.1、6.0 和 5.2 分支。强烈建议用户尽快升级到最新版本。潜在的安全问题应私下发送至 [email protected]

Python GUI:使用 PyQt6 或 PySide6 实现身份验证与授权——通过登录流程、基于令牌的认证以及基于角色的访问控制,为您的桌面应用程序提供安全保障

Qt 未为 PyQt6 或 PySide6 应用程序提供内置的身份验证框架。开发者必须结合 Qt 的功能与 Python 的网络及安全工具来实现身份验证和授权。三种常见方法是:对远程服务器进行简单的登录检查、基于令牌的功能解锁,以及在服务器端执行敏感逻辑。本教程聚焦于基于令牌的方法,该方法在安全性与简洁性之间取得平衡。这涉及在 PyQt6 中创建登录对话框和一个身份验证管理器类。身份验证管理器负责向远程 API 发起登录和令牌验证请求。 提供一个最小化的 Flask 服务器用于测试,暴露登录和验证令牌的端点。该服务器使用 JWT 生成令牌,并包含基本的用户角色,如"admin"(管理员)和"viewer"(查看者)。PyQt6 登录对话框是一个模态的 QDialog,用户在此输入凭据。随后,应用程序尝试使用 AuthManager 进行身份验证。若验证成功,则显示主窗口,并根据已认证用户的角色启用或禁用 UI 元素。 主窗口可根据用户角色动态配置菜单和操作,例如"Admin"(管理员)菜单。这实现了基于角色的访问控制,确保只有授权用户才能访问特定功能。所提出的解决方案为使用 PyQt6 在桌面应用程序中实现身份验证和授权提供了基础结构。鼓励开发者根据具体的安全需求对此结构进行调整和增强。

Bob Belderbos:如何判断您的 Python Mock 是否真正生效

在模拟外部 API 调用时,测试可能因错误原因通过:真实 API 可能偶然返回错误。这一情况出现在一个旨在验证将货币转换为无效货币会抛出异常的设计的测试中。原始测试通过了,但模拟响应被错误配置为表示成功,这意味着真实 API 返回了错误,而非模拟拦截了调用。 为确保模拟确实拦截了请求,添加了 `mock_get.assert_called_once()` 断言。这确认了补丁是否成功拦截了网络请求。一旦验证了拦截,便修正模拟响应以模拟 API 错误,从而使测试因预期原因通过。 补丁的两个关键方面被强调:补丁目标必须匹配名称使用的位置,而非其定义位置;且在导入时读取的模块级变量也需要进行补丁。使用 pytest 的 `mocker` fixture 可简化此过程,它替换了上下文管理器并自动处理清理工作。 模拟还可用于强制特定条件,例如在基于文件的存储中模拟重复代码,通过补丁 `next_code` 等函数实现。这确保对 `create_contact` 的两次调用生成相同的代码,从而引发 `FileExistsError`。测试的隔离至关重要,例如使用 `tmp_path` 处理文件系统操作,以防止测试运行之间出现状态泄漏。 与真实外部服务交互的测试应组织为集成测试,而完全模拟的测试则属于单元测试。这一区别可通过目录结构或 pytest 标记进行管理。在考虑模拟的替代方案时,推荐使用带有依赖注入的适配器类模式,以测试行为而非实现细节。然而,对于具有明确定义外部依赖的独立单元,模拟仍然是合适的。

PyCoder 周刊:第 737 期:Polars 1.41、邮件、优秀文档等(2026-06-02)

本期 PyCoder's Weekly 聚焦 Polars 1.41 的发布,其带来了性能提升。同时,提供了一份关于使用 Python 发送邮件的综合指南,涵盖附件与个性化等各个方面。文章还提出了一种针对代码代理性能退化的实用解决方案,采用具有隔离上下文的循环多角色架构。播客环节介绍了一款名为 Great Docs 的新 Python 文档工具,并深入探讨了用于改进 Python 的 PEP 与协议。分享了有效管理小型辅助脚本的技巧。本期还预告了一场即将举行的面向对象编程(OOP)现场工作坊,重点讲解如何使用面向对象风格的 Python 构建应用程序。通过对比分析,探讨了 mod_wsgi 6.0.0 中无锁线程(free-threading)与全局解释器锁(GIL)的技术差异。提供了将 Python 邮件包从版本 2 升级至版本 3 的说明。建议了一条学习路径,利用多种工具完善 Python 开发环境。回顾了用于大规模数据处理的七个顶级 Python 库。给出了使用 Python MCP 服务器将大语言模型(LLM)与数据连接的说明。提供了使用 `plt.scatter()` 在 Python 中创建散点图的教程及测验。分析了两个 Python 作用域 bug,以阐明对象生命周期的相关教训。简要提及了 Python 3.15 新增的哨兵内置函数。展示了多个新项目与代码仓库,包括用于 Django 的工具、导入分析工具、Jupyter Notebook 工作流工具、HTTP 客户端以及 MkDocs 插件。最后,列出了即将举行的与 Python 相关的活动与聚会。
CdXz5zHNQW_L1701OiEcl.png

Real Python:构建您的 Python 脚本结构

Python 脚本编写通常始于在 Jupyter Notebook 或 REPL 等环境中的交互式探索。随着代码库的扩展,将代码保存为 .py 文件对于提升组织性和可读性变得至关重要。转向结构化脚本能够增强协作并促进稳健的开发实践。本课程涵盖组织 Python 脚本的基础知识,包括可运行代码的放置位置以及导入语句的排列方式。课程还演示了使用常量和固定入口点进行重构的技术。关键要点包括:在类 Unix 系统上通过 shebang 使脚本可执行;按照标准惯例排列导入语句;使用 ruff 代码检查器实现自动导入排序和代码格式化;参与者将学习用有意义的常量替换硬编码值;最后,将使用 if __name__ == "__main__" 结构定义清晰的脚本入口点。

PyCharm:构建 2026 年应用的顶级代理框架

人工智能格局正迅速演变,正转向长期运行且以目标为导向的智能体系统。构建自主系统的 Python 开发者正依赖智能体框架来管理核心功能。LangChain 和 AutoGen 等流行框架正在涌现,此外还有众多其他框架,各自提供独特的能力。理解这些框架的优势对于为项目选择合适的框架至关重要。 人工智能智能体是能够自主推理、设定目标并执行任务的软件,它们能够随时间学习和适应。智能体运行在“感知 - 推理 - 行动 - 反思”的循环中,利用大语言模型(LLM)而无需用户持续输入。智能体框架为构建、运行和大规模控制这些智能体提供了必要的底层基础设施。 这些框架通常提供编排功能以处理序列化和协调,提供用于与外部系统交互的工具,并提供用于信息保留的内存机制。它们对于确保智能体的可靠性、可扩展性和安全性至关重要。关键优势包括促进多智能体协调、实现人在回路检查点以及提供可观测性。 常见的编排范式包括基于图、基于角色和基于链的方法,每种方法都有其独特的优势和局限性。基于图的方法提供确定性控制,但需要更多的前期设计。基于角色的方法直观且适合快速原型开发,但约束较少。基于链的方法为创造性任务提供灵活性,但可预测性较低。 LangChain 等框架凭借庞大的生态系统在快速原型开发方面表现出色。LangGraph 提供显式控制,非常适合生产级系统。LlamaIndex 以数据为先,在知识密集型智能体方面表现卓越。Haystack 专注于为生产级检索增强生成(RAG)和上下文密集型人工智能构建模块化管道。

Real Python:测验:构建您的 Python 脚本

在本测验中,您将检验对视频课程《构建 Python 脚本》的理解。 通过完成本测验,您将重温如何使用 shebang 使 Python 脚本可执行、按照 PEP 8 规范组织导入语句、使用 ruff 自动排序导入,以及使用 `if __name__ == "__main__"` 定义清晰的入口点。 这些习惯有助于您从 REPL 中的快速实验过渡到编写易于阅读、分享和扩展的 Python 脚本。

Real Python:测验:Python 的格式化迷你语言用于整洁的字符串

在本测验中,您将检验对 Python 格式迷你语言(Format Mini-Language)用于整洁字符串的理解。 通过完成本测验,您将重温 f-string 和 str.format() 中格式说明符的工作原理,包括对齐和宽度字段、小数精度、类型表示、千位分隔符、符号处理、动态说明符以及百分比格式化。

Python 软件基金会:No Starch Press 谦卑捆绑包:抓住优惠,支持 PSF!

No Starch Press,作为 Python 软件基金会(PSF)的长期支持者,推出了一款以 Python 为主题的 Humble Bundle 电子书合集。此次促销活动提供 15 本免数字版权管理(DRM)的图书,涵盖从入门到进阶的 Python 用户。该捆绑包采用“随心定价”模式,全套原价 583 美元的图书仅需 36 美元。每笔购书所得的一部分将直接用于支持 PSF。热门图书包括《用 Python 自动化无聊 stuff(第 3 版)》和《Python 编程:快速入门(第 3 版)》。用户可自定义捐赠分配比例,以增加流向 PSF 的款项。Humble Bundle 促销活动将持续至 2026 年 6 月 18 日。此举旨在提升 Python 教育的可及性,同时加强 PSF 的使命。PSF 是一家非营利组织,致力于推广、保护并推进 Python 编程语言及其社区的发展。捐赠与赞助使 PSF 能够持续开展其至关重要的工作。

特赖顿新闻:特赖顿新闻 2026年6月

过去一个月专注于修复错误、改进行为和优化性能,在上一版本的基础上进行了构建,同时也为用户引入了新功能。在会计方面,发票列表视图中现在可选地提供日记账列,并且可以按期间导出或打印发票。为 PEPPOL 电子文档的发票渲染增加了延迟,以便稍后进行付款记录。当导入 AEB43 账户报表失败时,现在会显示通用的用户错误消息。 在库存管理方面,现在可以直接在类别表单中管理产品。Tryton 将基于历史数据计算产品供应商的平均提前期。关于业务伙伴,Tryton 将尝试为标准字段(如电子邮件和电话)猜测联系机制类型。用户界面现在在删除 One2Many 中的记录或从 Many2Many 小部件中移除记录时,使用搜索对话框弹出窗口,并预选相同的记录。删除操作的确认消息现在会显示将被移除的记录数量。用户现在可以将通知标记为已读。 在系统数据方面,国家组织可用作税务规则的判定条件。已发布针对长期支持系列 8.0 和 7.0 以及系列 7.8 的错误修复。系列 6.0 和 7.6 已达到生命周期结束,将不再发布新版本。系统管理员将看到对 pytz 和 backports.entry-points-selectable 的依赖已被移除,且 Stripe 版本已更新。开发人员获得了 SQLite 中 age 功能的支持,用于日期持续时间计算时返回时间间隔而非天数。
CdXz5zHNQW_VUa4vevuvO.jpeg