用非类型对象注释参数

时间:2019-11-26 23:09:33

标签: python python-3.x annotations type-hinting

我正在开发一个采用python函数并将其转换为容器化程序的框架。 我需要一种使用一些扩展信息来注释函数参数的方法。 为此,我开始使用Python的“参数注释” /“类型提示”。 但是,我听到一些谣言说,将来非类型的注释将变得非法。真的吗? 我的框架可以在注释中使用非类型对象吗?

def my_func(
    param1: 'foo',
    param2: 'foo bar',
    param3: {'a' : 1},
):
    pass

1 个答案:

答案 0 :(得分:2)

PEP-484发布时,它明确允许出于任何目的继续使用功能注释:

  

请注意,即使PPE符合本规范,该PEP仍不会明确禁止其他方式使用注释,也不需要(或禁止)任何特殊的注释处理。就像PEP 333对Web框架所做的那样,它仅能改善协调。

PEP-484简单地标准化了类型注释(如果将注释用于注释)。


PEP-563包含一个似乎与之相抵触或忽略的注释:

  

注释的非键入用法

     

虽然注释仍然可用   除了类型检查外,还可以随意使用,值得一提的是   该PEP及其前体的设计(PEP 484和PEP   526),主要是由类型提示用例驱动的。

     

在Python 3.8中,PEP 484将从临时身份毕业。其他   对Python编程语言的增强,例如PEP 544,PEP 557,   或PEP 560,已经在此基础上构建,因为它们取决于   类型注释和PEP 484定义的键入模块。实际上,   PEP 484在Python 3.7中保持临时的原因是为了启用   快速发展的另一个发行周期   上述增强功能要求。

     

考虑到这一点,用于注释注释与   前面提到的PEP应该被视为已弃用。

在563之后,我看不到任何提及 function 注释的PEP,只有可变注释。


我会 暂时 建议您,只要您知道这种用法与{{1 }}。

mypy停止对注释的求值并将其视为原始字符串(这将成为Python 4中的默认行为)这一事实表明,如果您坚持使用字符串 now ,使用非类型提示注释不会继续对运行时造成影响。 (也就是说,不要依赖您的注释进行实际评估。)