我正在开发一个采用python函数并将其转换为容器化程序的框架。 我需要一种使用一些扩展信息来注释函数参数的方法。 为此,我开始使用Python的“参数注释” /“类型提示”。 但是,我听到一些谣言说,将来非类型的注释将变得非法。真的吗? 我的框架可以在注释中使用非类型对象吗?
def my_func(
param1: 'foo',
param2: 'foo bar',
param3: {'a' : 1},
):
pass
答案 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 ,使用非类型提示注释不会继续对运行时造成影响。 (也就是说,不要依赖您的注释进行实际评估。)