Python doc __future__

在python doc about __future__中,下面有一个表显示

>>> def add_int(a:int, b:int) -> int:
...     return a + b
>>> add_int.__annotations__
{'a': <class 'int'>, 'b': <class 'int'>, 'return': <class 'int'>}

我怀疑我不清楚这里"可选"和"强制"的含义

推荐答案

强制性是一个有趣的词汇 Select .我猜这意味着它在语言中是默认的.你不必用from __future__ import annotations启用它

annotations特征指的是PEP 563:Postponed注释判断.这是对现有annotations feature的一个增强,它最初在python 3.0中引入,在python 3.5中重新定义为type hints,这就是代码在python 3.8下工作的原因.

以下是python 3.7+中的from __future__ import annotations个可选更改:

class A:
    def f(self) -> A: # NameError: name 'A' is not defined
        pass

但这是有效的

from __future__ import annotations

class A:
    def f(self) -> A:
        pass

请参阅python 3.7中的this章延迟注释的新增功能:

由于此更改 destruct 了兼容性,因此需要在Python 3.7中使用__future__导入在每个模块的基础上启用新行为:

from __future__ import annotations

它将成为Python 3.10*中的默认值.

*它在3.10版本(python3.7发布时)被宣布为默认版本,但现在被转移到了更晚的版本

Python-3.x相关问答推荐

如何在python中有效地使用多处理和pytube库来加快下载速度?

模型中的__str__方法在Django管理面板中生成大量重复查询

如何在matplotlib中显示次要刻度标签

PANDAS中当前数据帧的匹配与更新

我无法直接在 VSCode 中运行该程序,但可以使用 VScode 中的终端运行它

PyTest:尽管明确运行了测试,但是被标记为没有运行测试

Django在POST到外部URL时如何进行CSRF保护? 更新

无法提出给定 for 循环的原因 (Python 3.11)

如何在 20 秒后重复使用 Pillow 在现有图像上创建新图像?

合并问卷中多列中的稀疏问题 - Pandas

避免重复连续字符但不包括一个特定字符的正则表达式

是否可以将多个 if 转换为数组?

用于 BIG 数组计算的多处理池映射比预期的要慢

如何在python中将列表转换为其他格式

多个返回函数的列表理解?

Python中的依赖倒置

IronPython 3 支持?

tkinter TclError:错误的文件类型使用 askopenfilename

三个参数的reduce函数

update和update_idletasks有什么区别?