Python中字典赋值误写为:未报错的原因及相关疑问
Python中
dict_x["key2"]: val2语法解析:不报错也不修改字典的原因 1. 如何确认这是类型注解而非其他语法?
这确实是Python的表达式注解语法,属于PEP 526引入的变量注解体系的扩展。你可以通过以下方式验证:
- 运行代码后查看字典对象的
__annotations__属性:
输出结果为dict_x = {"key1": "val1"} val2 = "test_val" dict_x["key2"]: val2 print(dict_x.__annotations__){"['key2']": 'test_val'},说明这条语句被解释器当作注解处理:它把dict_x["key2"]这个表达式作为注解的键,将val2的值作为注解值,存储在字典的__annotations__属性中。 - 从语法规范来看,Python 3.6+允许对任意命名表达式(包括字典索引、属性访问等)添加注解,这类注解和常规的
var: Type注解属于同一语法体系,解释器会统一处理并存储,不会触发语法错误。
2. 为什么非类型的val2或数值2能用作类型注解?
Python的类型注解设计是完全动态、无强制约束的:
- PEP 526明确规定,注解可以是任意合法的Python表达式,不一定必须是类型对象(比如
int、str这类)。解释器只会负责把注解的值存储起来,不会做任何类型校验或限制。 - 所谓的“类型注解”只是一种约定俗成的用法,静态类型检查工具(如mypy、pyright)会根据注解做类型校验,但解释器本身不关心注解的内容——你可以用变量、数值、函数实例甚至自定义对象作为注解值,运行时都不会报错。
另外补充:这条语句返回None且不修改字典的原因是,注解语句本质是声明性语句,不是赋值操作,它不会对字典的键值对做任何修改,只是附加注解信息,因此执行后字典内容不变,语句本身没有返回值(默认返回None)。
内容的提问来源于stack exchange,提问作者Matthew Deutsch
相关产品推荐
相关产品推荐

