【问题标题】:Providing Backwards Compatability with Python 3.6 Variable Annotations提供与 Python 3.6 变量注释的向后兼容性
【发布时间】:2018-06-04 07:31:48
【问题描述】:

我正在尝试创建一个 python 包(目前不在任何地方)并且我想使用 3.6 python 变量注释,即

foo: int = 5

同时仍提供对 Python 3.5 的支持。

有没有办法在 Python 3.5 中提供这些样式的变量注释,或者通过

from __future__ import variable_annotations

或类似的。我知道可以使用注释类型注释,但我希望能够使用这种样式。

【问题讨论】:

  • [PEP 526 Syntax for Variable Annotations ](python.org/dev/peps/pep-0526/#backwards-compatibility) 说它是向后兼容的,但我找不到任何关于如何做到这一点的例子。我有一个针对 3.6 开发的代码库,我现在需要在 3.5 上运行它,我不想去转换所有注释。
  • @RianSanderson 这就是说它是向后兼容的,因为在 PEP526 之前的 3.5 中工作的代码在 PEP526 之后仍然可以工作。
  • 我想它也很像this,因为它是解释器的一部分。

标签: python python-3.6 backwards-compatibility typechecking


【解决方案1】:

TLDR:不,您不能在 Python 3.5 及更早版本中使用变量注释。

首先,Python 3.6.0 changelog 报告变量注释是与 3.5 相比的新功能。

其次,PEP 526 定义为backward compatible。根据PEP 387

除非它正在经历下面的弃用过程,否则该行为 任何两个连续版本之间的 API 不得更改。

这包括:

参考定义的这些结构的语法和行为 手册

所以 PEP 526 的“fully backwards compatible”只是意味着 Python 3.5(或者谨慎地说,PEP526 之前的)语法将在 3.6.0 中正常工作:变量注释 are not mandatory

最后,您提到了“注释类型注释”。所以我只提供一个指向PEP 484 的链接,它适用于 Python 3.5(它可能对这个问题的某些读者有用)。

【讨论】:

  • 最好的做法是根本不使用它,还是只支持 3.6 及更高版本?
  • 这真的取决于你的包裹的受众。如果您的大部分用户使用 Python 3.5 及以下版本 - 您别无选择。
  • 我现在正在开发一个包,我想知道我是否应该支持 py 3.5 或更低版本。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-04
  • 1970-01-01
相关资源
最近更新 更多