有没有办法在以前的版本中使用 Python 3.9 类型提示?

kbn*_*bnt 5 python static-typing type-hinting python-3.9

在Python 3.9,我们可以使用类型提示中内置的方式小写(而不必输入型特征从typing模块)描述在这里

def greet_all(names: list[str]) -> None:
    for name in names:
        print("Hello", name)
Run Code Online (Sandbox Code Playgroud)

我非常喜欢这个想法,我想知道是否可以使用这种类型提示的方式,但是在以前的 Python 版本中,例如 Python 3.7,我们编写了这样的类型提示:

from typing import List

def greet_all(names: List[str]) -> None:
    for name in names:
        print("Hello", name)
Run Code Online (Sandbox Code Playgroud)

ale*_*inn 14

annotations简单地说,导入__future__即可。

from __future__ import annotations

import sys
!$sys.executable -V #this is valid in iPython/Jupyter Notebook


def greet_all(names: list[str]) -> None:
    for name in names:
        print("Hello", name)
        
        
greet_all(['Adam','Eve'])

Python 3.7.6
Hello Adam
Hello Eve
Run Code Online (Sandbox Code Playgroud)

  • 不过,3.9 之前版本的 `mypy` 不会知道 `list[str]` 的含义。 (3认同)
  • @Anakhand 来自 PEP:“对于仅限于类型注释的用例,具有“注释”未来导入功能的 Python 文件(自 Python 3.7 起可用)**可以参数化标准集合**,包括内置函数。重申一下,这取决于外部工具认为这是有效的。” (2认同)