惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

博客园_首页
Engineering at Meta
Engineering at Meta
F
Fortinet All Blogs
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
T
The Blog of Author Tim Ferriss
Blog — PlanetScale
Blog — PlanetScale
GbyAI
GbyAI
The Cloudflare Blog
大猫的无限游戏
大猫的无限游戏
MyScale Blog
MyScale Blog
B
Blog
爱范儿
爱范儿
博客园 - 【当耐特】
P
Proofpoint News Feed
Y
Y Combinator Blog
博客园 - 司徒正美
Vercel News
Vercel News
阮一峰的网络日志
阮一峰的网络日志
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
腾讯CDC
Jina AI
Jina AI
B
Blog RSS Feed
博客园 - 三生石上(FineUI控件)
G
Google Developers Blog
Apple Machine Learning Research
Apple Machine Learning Research
MongoDB | Blog
MongoDB | Blog
Google DeepMind News
Google DeepMind News
Hugging Face - Blog
Hugging Face - Blog
博客园 - Franky
D
DataBreaches.Net
F
Full Disclosure
WordPress大学
WordPress大学
月光博客
月光博客
美团技术团队
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
I
InfoQ
酷 壳 – CoolShell
酷 壳 – CoolShell
S
SegmentFault 最新的问题
Microsoft Security Blog
Microsoft Security Blog
雷峰网
雷峰网
C
Check Point Blog
Stack Overflow Blog
Stack Overflow Blog
aimingoo的专栏
aimingoo的专栏
H
Help Net Security
N
Netflix TechBlog - Medium
D
Docker
L
LangChain Blog
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
H
Hackread – Cybersecurity News, Data Breaches, AI and More
Recorded Future
Recorded Future

BlogFinder

日常漫步 Vol.24 之漫步前山河 - 雅余 周报 #1-聊聊本周的收获 - Edwin's Blog 我的OpenCode必装插件与Skill Write Something 掌中之物未必在掌握之中 · CRIVU PiliNara,一个更顺手的 PiliPlus 分支 「NekoEcho」:做一个必有回响的猫娘主题博客 2026-05 书影音总结 简化博客主题 - 安迪 你要加油呐 我第一次发布 npm 包 拾花小记#45:中考前的二三事 – 小改学习志 黛西花园5月游 #18 枇杷又熟了的五月月报 一些奇奇怪怪的需求?word仿方正书版的几个小操作 - Xiobb's Blog 0419 御温泉之旅 修复了一些bug,网站基本上趋于稳定了 - 新锐博客 又回到四十年前 如何定义成功 迷鹿屋2026已重新上线 科技冰火两重天+一周回顾 ${title} 热度退了,我反而用得更深了-咕咚同学 我到底该不该换个域名? 随身WIFI折腾记 - 安迪 博客撰写体验提升——hexo pro插件 为什么不用相机把屏幕上的接关密码拍下来? 国清寺与天台山 – Ouroboros ★★★★☆《挽救计划》——久违的经济上行感 - Davidの3号基地 删除右键“打开方式”里多余选项 第三周刊_No.53|一切都会被支付两次 安卓APP通话记录与录音上传踩坑记录 - 子舒的博客 天量下跌 inBox 笔记 2.3.8,把工具栏交给了你-咕咚同学 我把小龙虾搬到了微信-咕咚同学 安好 - 响石潭 Compound Engineering Plugin:让每个工程单元都比上一个更容易 MOSS-TTS Family:开源高质量语音与声音生成模型家族深度解析 Crawl4AI:专为 LLM 设计的开源 Web 爬虫与数据抓取工具 Build Your Own X:从零实现你最喜欢的技术——程序员进阶的终极资源清单 Anthropic Skills:用文件夹教 Claude 专业技能的开源框架 1年的去月球(下) - 梅之夏 欢迎回来。 简单讲讲 ASN.1 与 OID DTV - 直播聚合客户端 5.22-5.27 – 不兴江 还没去过鸭川 – 不兴江 张晶晶同学三刷林志颖 关于我 – 不兴江 爱与嫉妒 – 不兴江 港股被持续做空 备案码花了四百块-咕咚同学 一句话生成封面:我给公众号做了4种风格的AI封面生成技能 「官」方認證 再谈费曼学习法 2026-05-28T00:34:11+08:00 2026-05-28T00:28:45+08:00 离谱的英语学习指南:基于AI的英语进阶系统方法论 iii:零集成架构的后端统一运行时 Claude Code Harness:让 Claude Code 工作有迹可循的工程化框架 Heretic:全自动移除大语言模型审查机制的开源工具 MarkItDown:微软开源的万能文档转 Markdown 利器 Harness:让 Claude Code 秒变多智能体协作工厂 这段时间尽折腾AI Agent了,确实极大地提高了效率 近期动态:两个新站点正式上线啦 误判解除!zhouayuan.com 腾讯安全申诉成功 - 周阿源|玩具设计・插画日常・生活随笔 Ralph:让 AI 编码工具自主循环跑完所有 PRD 任务的量产神器 全都违法 – 个人工作记录 关于zhouayuan.com被误判 “含违规信息” 的说明与申诉记录 - 周阿源|玩具设计・插画日常・生活随笔 小米 MiMo v2.5 Pro 白嫖 最大的人间清醒,兜里有钱,但是不花。 夜晚靓歌(12):于文文现场solo - 王志勇的Blog 今日插画:风扬起的倔强 - 周阿源|玩具设计・插画日常・生活随笔 回门习俗 独立网卡 - 忘记了回忆 500亿入股人工智能企业 从命令行到桌面智能体-咕咚同学 第一性原理读书笔记 行者微评论223-加班の守株待兔-博客|政治与时事-风雨行者 ZOZO开源物理接触求解器:GPU加速的可扩展仿真引擎 OpenStock:开源股票市场交易平台技术深度解析 MoneyPrinterTurbo:基于AI的全自动短视频生成工具深度解析 Claude-Mem:为 Claude Code 构建的持久化记忆压缩系统 Twenty:可代码化定制的企业级开源 CRM 平台技术深度解析 2026-05-26T22:59:17+08:00 企业级开源大模型部署平台 GPUStack 实战教程 1年的去月球(上) - 梅之夏 Sevalla - 静态网站托管服务 不用翻墙、不用注册、不用月费,普通人也能用上 Claude Code 装修灯具要注意⚠️ 黄梅天先锋 - 游子微博 公安备案顺利办结,站点备案全部完成 - 周阿源|玩具设计・插画日常・生活随笔 第三次兑换天猫超市卡了宗宗酱-三维狐少儿编程 Don't think, feel. - Rolen's Blog 人这一辈子,到底图个什么 博客迁移 - Edwin's Blog 情感赛道写作模板 再现本轮行情的典型特征 裁员与平常心-咕咚同学 别让“偷懒”,成为隐私泄露的破绽
typing_extensions 有用(三):使用 Unpack 结合 TypedDict 给 **kwargs 装上透视眼 | 阿尔的代码屋
Algieba · 2026-06-19 · via BlogFinder

核心摘要 (TL;DR)

  • 背景:封装底层函数或第三方 API 时,我们经常使用 **kwargs 来接收大量可选参数,但这会导致调用者在写代码时失去任何 IDE 提示,只能靠猜或翻看源码。
  • 核心问题**kwargs 是静态类型检查的“黑洞”。
  • 关键解法:使用 TypedDict 定义严格的字典结构说明书,然后用 Unpack 将这份说明书“解包”塞进 **kwargs 中。
  • 最佳实践:抛弃旧时代的 total=False,全面拥抱 RequiredNotRequired 实现字段级的精准控制。

问题概览卡片

基本信息

  • 应用场景:编写需要接收大量可选配置项的函数(如大模型调用、数据库查询封装、绘图库配置)。
  • 技术栈:Python 3.11+ 或 typing_extensions
  • 核心痛点:极其糟糕的 API 调用体验(无补全、无类型校验)。

案发现场:让人抓狂的类型黑洞

在 Python 中,**kwargs 是个极其灵活的设计。假设我们正在封装一个大模型调用的 API:

原始代码(痛点展示):

1
2
3
4
5
6
7
8
9
def invoke_llm(prompt: str, **kwargs) -> str:

pass





invoke_llm("你好", temperture=0.9, maxTokens="100")

在讲 Unpack 之前,我们必须先打造一份“参数说明书”,这就是 TypedDict 的使命。它能在不改变字典本质(零运行时开销)的前提下,告诉 IDE 这个字典里应该长什么样。

为了应对配置项通常只有少部分是必填的场景,工业界目前最推荐的写法是结合 NotRequired

1
2
3
4
5
6
7
8
from typing_extensions import TypedDict, NotRequired, Required


class LLMKwargs(TypedDict):
model: str
temperature: NotRequired[float]
max_tokens: NotRequired[int]
stop_words: NotRequired[list[str]]

(注:在早期的 Python 版本中,人们通常使用 class LLMKwargs(TypedDict, total=False): 来让整个字典变成选填,但这种“一刀切”的方式远不如 NotRequired 精准。)


2. 核心武器二:Unpack (透视魔法)

有了说明书,接下来就是见证奇迹的时刻。我们需要用 UnpackLLMKwargs 的规则“解包”并注入到那个无法无天的 **kwargs 肚子里。

1
2
3
4
5
6
7
from typing_extensions import Unpack


def invoke_llm(prompt: str, **kwargs: Unpack[LLMKwargs]) -> str:
print(f"发送 Prompt: {prompt}")
print(f"携带参数: {kwargs}")
return "success"

体验降维打击般的开发手感

当你的同事现在去调用这个函数时,他将获得接近强类型语言的完美体验:

  1. 极其智能的代码补全:敲下 invoke_llm("hello", ) 时,IDE 自动弹出 model, temperature, max_tokens 供其选择。
  2. 严格的必填项校验:如果他没有传 model,IDE 直接画红线警告。
  3. 精准的类型拦截:如果他写了 temperature="高"(传了字符串),IDE 会立刻标红报错,防患于未然。

3. 灵魂拷问:为什么不用 Pydantic?

很多熟悉 FastAPI 或高级类型操作的开发者会问:既然都要校验数据,我为什么不直接定义一个 Pydantic 的 BaseModel 传进去?

1
2
3
4
5
6

def invoke_llm_pydantic(prompt: str, config: LLMConfigModel):
pass


invoke_llm_pydantic("hello", LLMConfigModel(model="gpt-4", temperature=0.7))

答案是:它们根本不在一个赛道竞争。

  • Pydantic 是一座“运行时的安检门”。它在代码运行时会强行校验数据、转换类型,有明显的性能开销。适合放在系统的边缘(如 HTTP 请求入口、解析不可靠的大模型 JSON 输出)来清洗脏数据。
  • TypedDict + Unpack 是“IDE 里的隐形图纸”。它保留了 Python 最传统、最优雅的 **kwargs 关键字传参习惯,同时在零运行时开销的前提下,为开发者提供了顶级的编写体验。适合用在系统内部高频流转的函数调用中。

4. 最终总结

传参方式IDE 补全静态类型检查运行时开销语法优雅度
**传统 **kwargs**❌ 无❌ 无🟢 极低🟢 极佳
Pydantic Model✅ 完美✅ 完美🔴 较高🟡 一般(需实例化)
Unpack[TypedDict]✅ 完美✅ 完美🟢 极低🟢 极佳

拥抱 Unpack,让你的框架和组件既有动态语言的飘逸,又有静态语言的严谨!