“如果为假:从输入导入类型”是什么意思?

CIs*_*ies 5 python types

在查看pytest src 代码时,我发现了这个奇怪的声明,有人可以解释一下吗?

if False:  # TYPE_CHECKING
    from typing import Type
Run Code Online (Sandbox Code Playgroud)

实际上,我目前正在查看PEP 526,我认为这可能以某种方式与注释相关,但不确定如何相关。有人可能会False以评估的方式进行注释吗True

快速查看输入源代码后,我发现:

# Constant that's True when type checking, but False here.
TYPE_CHECKING = False
Run Code Online (Sandbox Code Playgroud)

因此,从我目前收集到的信息来看,@chepner 是正确的。运行类型检查时会评估此语句True,然后可能需要实际导入。虽然在我看来这仍然很奇怪(#if DBG在 C 中更清晰)

ask*_*oni 2

if False: 
    ...
Run Code Online (Sandbox Code Playgroud)

是一种旧的编写方式,现在(自 Python 3.5.2 起)用

from typing import TYPE_CHECKING

if TYPE_CHECKING: 
    ...
Run Code Online (Sandbox Code Playgroud)

TYPE_CHECKING

True由第三方静态类型检查器假定的特殊常量。它是False在运行时。