You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中能否获取传入函数的实参的类型注解?

问题解答

先回顾你的示例代码:

# Python 3.12+ 简化语法定义类型别名
type T = int
t: T = 1  # 变量t标注类型T

变量t的注解存储在其定义作用域的__annotations__中:

>>> __annotations__['t']
"T"

你的核心问题是:调用f(t)时,函数f内部能否获取原变量t的类型注解?你的判断是「函数内部无法获取」,这个结论是正确的,原因如下:

1. 类型注解的存储逻辑

变量的类型注解属于变量绑定的元数据,而非变量指向的对象的属性。它只会存储在变量被定义的作用域(全局作用域、函数局部作用域等)的__annotations__字典中,不会附加到对象本身。

2. Python参数传递的本质

调用f(t)时,Python传递的是t所指向的对象(这里是整数1)的引用,而非变量t本身。函数f的形参x只是一个新的局部变量,它仅与接收的对象绑定,和原变量t没有任何关联——原变量的名称、注解等信息,不会随对象传递到函数内部。

3. 函数局部帧的限制

函数运行时的局部帧仅包含当前作用域内的变量信息(比如形参x的名称和它指向的对象),完全不记录实参的来源变量,因此无法从局部帧中获取原变量的类型注解。

补充:不推荐的hack方案

如果非要获取原变量的注解,只能通过inspect模块解析调用栈的源代码,逆向查找调用处的变量信息。但这种方式严重依赖调用代码的写法,稳定性极差,完全不符合Python的设计意图,实际开发中绝对不建议使用。

内容的提问来源于stack exchange,提问作者mcmayer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 21:13:32