首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >注释或注释函数

注释或注释函数
EN

Stack Overflow用户
提问于 2019-10-17 03:06:04
回答 3查看 100关注 0票数 3

根据PEP 526 --变量注释的语法,您可以做注释来注释这样的函数:

代码语言:javascript
运行
复制
def comment():
    num: int = 5
    print ('COMMENTS', __annotations__)

那为什么这个不起作用?

代码语言:javascript
运行
复制
>>> comment()
COMMENTS {}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-10-17 03:14:59

如果您阅读您所链接的PEP,您将发现以下文本:

注释局部变量将导致解释器将其视为本地变量,即使从未分配给它。局部变量的注释不会被计算为: def ():x: NonexistentName #无错误。 但是,如果是在模块或类级别,则将对类型进行评估: x: NonexistentName #错误!类X: var: NonexistentName # Error! 此外,在模块或类级别的中,如果要注释的项是一个简单的名称,那么它和注释将存储在该模块或类的__annotations__属性中(如果是私有的),作为从名称到求值注释的有序映射。下面是一个示例: 输入导入Dict类播放器:.玩家: Dictstr,Player __points: int print(__annotations__) # prints:{‘Player’:typing.Dictstr,__main__.Player,# '_Player__points':}

局部变量注释不求值,也不存储在__annotations__ dict中。实际上,局部变量根本没有__annotations__ dicts;您正在为模块全局打印__annotations__

票数 5
EN

Stack Overflow用户

发布于 2019-10-17 03:13:38

你应该阅读佩普526的全文(强调我的):

注意,如果没有静态地找到注释,那么根本就不会创建__annotations__字典。此外,在本地提供注释的价值并不能抵消在每个函数调用中创建和填充注释字典的成本。因此,函数级的注释不进行评估,也不存储.

票数 3
EN

Stack Overflow用户

发布于 2019-10-17 03:19:20

来自PEP 526 --变量注释的语法

注释局部变量将导致解释器将其视为本地变量,即使从未分配给它。将不计算局部变量的注释。

注意,如果没有静态地找到注释,那么根本就不会创建注释字典。此外,在本地提供注释的价值并不能抵消在每个函数调用中创建和填充注释字典的成本。因此,函数级的注释不会被评估和存储。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58424301

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档