Python 中字典键值对的变量名缩写语法详解
Python 原生不支持 JavaScript 风格的 {name, age} 这类键名与变量名自动映射的字典字面量缩写,但可通过 locals()、inspect 或现代工具(如 dataclasses/pydantic)实现语义等效的简洁构造方式。 python 原生不支持 javascript 风格的 `{name, age}` 这类键名与变量名自动映射的字典字面量缩写,但可通过 `locals()`、`inspect` 或现代工具(如 `dataclasses`/`pydantic`)实现语义等效的简洁构造方式。在 JavaScript 中,当局部变量 name 和 age 已存在时,可直接用对象简写语法创建等效对象: const name = "Alice", age = 30;const person = { name, age }; // ? 等价于 { name: name, age: age }而 Python 的字典字面量 不提供此类语法糖。以下写法是非法的,会引发 SyntaxError:# ? 错误:Python 不允许这种省略键名的写法person = {name, age} # → set literal, not dictperson = {name: name, age: age} # ? 正确但冗长? 可行的替代方案1. 使用 locals() + 函数封装(轻量实用)最接近原生体验的方式是封装一个辅助函数,显式提取当前作用域中指定名称的变量:def dictvars(*names): frame = inspect.currentframe().f_back local_vars = frame.f_locals global_vars = frame.f_globals return { name: local_vars.get(name, global_vars.get(name)) for name in names }# 使用示例import inspectname = "Bob"age = 25person = dictvars("name", "age")print(person) # {'name': 'Bob', 'age': 25}?? 注意:依赖 inspect 会略微影响性能,且在某些优化环境(如 PyPy 或启用 -O 标志)下可能受限;生产环境建议仅用于开发/调试辅助。立即学习“Python免费学习笔记(深入)”; VWO 一个A/B测试工具
