Python 如何使导入保持轻量级,并且仍然正确地进行类型注释?

Python 如何使导入保持轻量级,并且仍然正确地进行类型注释?,python,tensorflow,mypy,python-typing,Python,Tensorflow,Mypy,Python Typing,Tensorflow是一款超重型进口车。我只想在需要时导入它。但是,我有这样一个模型加载函数: 输入import Dict,任意 从keras.models导入Model#重导入!需要2秒钟左右! #模型加载是一项繁重的任务。只做一次,并记住 模型=无#类型:可选[模型] def load_模型(配置:Dict[str,Any],shape)->模型: “”“加载模型。”“” 如果globals()['model']为无: globals()['model']=创建_模型(wili.n_类,形状

Tensorflow是一款超重型进口车。我只想在需要时导入它。但是,我有这样一个模型加载函数:

输入import Dict,任意
从keras.models导入Model#重导入!需要2秒钟左右!
#模型加载是一项繁重的任务。只做一次,并记住
模型=无#类型:可选[模型]
def load_模型(配置:Dict[str,Any],shape)->模型:
“”“加载模型。”“”
如果globals()['model']为无:
globals()['model']=创建_模型(wili.n_类,形状)
打印(globals()['model'].summary())
返回globals()['model']
也许变量可以帮助您:

如果导入仅用于正向引用(字符串文字)或注释中的类型批注,则可以在
if type_CHECKING
:中写入导入,以便在运行时不执行导入

由键入模块定义的类型检查常量在运行时为False,但在类型检查时为True

例如:

# foo.py
from typing import List, TYPE_CHECKING

if TYPE_CHECKING:
    import bar

def listify(arg: 'bar.BarClass') -> 'List[bar.BarClass]':
    return [arg]
类型检查也可用于避免

# bar.py
from typing import List
from foo import listify

class BarClass:
    def listifyme(self) -> 'List[BarClass]':
        return listify(self)