从具有不同级别模块的Python导入和导入

问题描述 投票:0回答:1

我看到这样的代码:

import torch
from torch import nn
from sklearn.metrics import r2_score

我正在学习Python,但我没有看到真正的文档可以解释第一个导入,我认为前两行在其他语言中相当于:

from torch import torch.nn

我的意思是为什么有两行,我想是因为代码后来只使用了火炬,

我不明白Python中两个级别的子模块,有doc的url吗?超过 3 或 4 个模块级别怎么样?

python-3.x
1个回答
0
投票

Python 中的某些包包含子模块,默认情况下不加载这些子模块。这有几个优点。如果您不使用子模块(在您的情况下为

nn
),则不需要导入它,从而减少加载时间。它还有助于维护干净且模块化的代码库和命名空间。

通过两个导入,您实际上导入了

torch
nn
,并指定包
nn
可以在
torch
中找到,如
torch.nn

导入时可以使用三个关键字:

import
from
as
,其中
as
仅用于更改本地命名空间中的包名称。
一个简单的
import ... [as ...]
将仅导入包并使其在默认名称或使用
as
指定的名称下可用。
使用
from ... import ... [as ...]
时,您将从包中导入子模块。
这也可以用于重命名没有
as
的包:
from torch import nn
import torch.nn as nn
相同。 您还可以始终在
import
关键字之后导入多个模块/子模块:
from torch import nn, cuda

这将导入
torch.nn
torch.cuda

同时导入两者的方法(

from torch import torch.nn
)将不起作用。这相当于:
import torch.torch.nn as torch.nn

from torch.torch import nn

您可以使用这个:

import torch, torch.nn as nn

对于必须导入第三层和第四层的每个子模块的担忧:
大多数子模块默认是隐式导入的。而且很少找到必须显式导入的子模块,而不是在包的第二层。

简而言之:如果您想使用

torch
nn
,您必须同时导入两者。如果您只使用
torch
无论如何,您不需要导入
nn

© www.soinside.com 2019 - 2024. All rights reserved.