>>> x : foo = 3
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'foo' is not defined
>>> def add(x):
y : bar = 1 # No Error
return x + y
>>> add(3)
4
很明显,没有读取名称bar
,但是在运行时读取了foo
。这是已知的东西吗?定义/未定义注释的当前条件是什么?在将来的版本中,这对于在任何地方定义注释都是强制性的吗?
根据文档:
https://docs.python.org/3/library/typing.html#typing.TYPE_CHECKING
不评估局部变量的类型注释
所以这说明了为什么您的第二个示例没有引发错误。
如果需要转发声明注释(即,您想使用稍后将在代码中定义的符号),则可以使用字符串文字,例如:
x: 'foo' = 3