python - 注释或注释函数
问题描述
根据PEP 526 -- Syntax for Variable Annotations你可以做注释来注释这样的函数:
def comment():
num: int = 5
print ('COMMENTS', __annotations__)
为什么这不起作用呢?
>>> comment()
COMMENTS {}
解决方案
如果您阅读您链接的 PEP,您会发现以下文本:
注释局部变量将导致解释器将其视为局部变量,即使它从未被分配给。不会评估局部变量的注释:
def f(): x: NonexistentName # No error.
但是,如果它在模块或类级别,则将评估类型:
x: NonexistentName # Error! class X: var: NonexistentName # Error!
此外,在模块或类级别,如果被注释的项目是一个简单的名称,那么它和注释将
__annotations__
作为从名称到评估的注释的有序映射存储在该模块或类的属性中(如果私有,则被损坏) . 这是一个例子:from typing import Dict class Player: ... players: Dict[str, Player] __points: int print(__annotations__) # prints: {'players': typing.Dict[str, __main__.Player], # '_Player__points': <class 'int'>}
局部变量注释不被评估,也不存储在__annotations__
字典中。事实上,根本没有__annotations__
局部变量的字典;您正在__annotations__
为模块全局变量打印。
推荐阅读
- azure - 如何使用 az cli 获取应用服务的诊断设置列表
- android-jetpack-compose - Jetpack Compose 示例,显示最小化继续运行的视图
- arrays - 是否可以在 c 中的另一个字符串函数中使用一个字符串函数
- c++ - QWidget 半透明区域不接受任何事件
- python - Python/Flask:在接收到 HUP 信号时阻止 Gunicorn 重新启动?
- makefile - 如何设置 Makefile 所在的目录,以便我可以使用 `make -C` 选项从不同的目录运行 make?
- php - 基于字符串动态构造对象选择
- android - 当我使用 CSV 文件作为具有大量条目的数据库时,Android 应用程序崩溃
- python - 使用 jupyter notebook 时无法在 ply 中构建词法分析器
- python - allennlp.common.JsonDict,TypeError:FileLock.acquire:`poll_intervall` 不存在