Rex*_*Low 1 python python-import
我正在对PyTorch源代码进行一些研究。作者实际上在该文件中删除了模块。
from .adadelta import Adadelta # noqa: F401
from .adagrad import Adagrad # noqa: F401
from .adam import Adam # noqa: F401
del adadelta
del adagrad
del adam
Run Code Online (Sandbox Code Playgroud)
这样做的理由是什么?
这是将功能分解为子模块的一种方式,而无需使子模块成为公共API的一部分。导入系统的一个怪癖是,这种相对导入最终会将子模块放在父级的命名空间中,因此用户可以执行以下操作:
import torch.optim
Run Code Online (Sandbox Code Playgroud)
然后通过访问的属性进行访问,torch.optim.adadelta
而无需显式导入torch.optim.adadelta
。尽管某些Python内置程序包以这种方式工作,并且不会被撤消,因为有太多人无意中依赖它(例如,只import os
使用os.path
API的人,然后才使用API),通常最好避免这种数据泄漏。导入torch.optim
仅应提供对列出的特定名称的访问权限,而不能保证将自动导入哪些子模块。
这样一来,人们就不会偶然地仅依赖于torch.optim.adadelta
导入后的使用能力torch.optim
,因此开发人员可以自由地重构它,以移动特定类和其他API的实现,而无需付出特殊的努力来确保import torch.optim
也导入所有这些子模块只是为了保留执行不正确/不完整导入的代码中的行为。
归档时间: |
|
查看次数: |
76 次 |
最近记录: |