在python中,'import foo.bar as bar'和'from foo import bar'有什么区别?
In python, what is the difference between 'import foo.bar as bar' and 'from foo import bar'?
我在 pyTorch 和 matplotlib 中看到了这个约定:
import torch.nn as nn
import torch.optim as optim
import matplotlib.pyplot as plt
为什么要将整个路径 (module.submodule
) 作为别名而不只是子模块导入是有原因的吗?如果我这样导入有什么区别:
from torch import nn
from torch import optim
from matplotlib import pyplot as plt
编辑:所以对于一般情况:
import foo.bar as bar # [1]
from foo import bar # [2]
是否存在引用 bar
的代码,使得它 运行 与 [1]
而不是 [2]
(反之亦然)? IE。这两种导入方式有functional区别吗?
import blank as blank
允许您在整个程序中引用该模块作为该名称。
from blank import blank
从模块中导入特定的方法、函数和 类。
在幕后,所有导入语句基本上都映射到内置 __import__
例如:
import torch.nn as nn
变成
nn = __import__("torch.nn", globals(), locals(), [], 0)
类似地:
from torch import nn
变成
nn = __import__("torch", globals(), locals(), ["nn"], 0)
略有不同但功能相同。
我在 pyTorch 和 matplotlib 中看到了这个约定:
import torch.nn as nn
import torch.optim as optim
import matplotlib.pyplot as plt
为什么要将整个路径 (module.submodule
) 作为别名而不只是子模块导入是有原因的吗?如果我这样导入有什么区别:
from torch import nn
from torch import optim
from matplotlib import pyplot as plt
编辑:所以对于一般情况:
import foo.bar as bar # [1]
from foo import bar # [2]
是否存在引用 bar
的代码,使得它 运行 与 [1]
而不是 [2]
(反之亦然)? IE。这两种导入方式有functional区别吗?
import blank as blank
允许您在整个程序中引用该模块作为该名称。
from blank import blank
从模块中导入特定的方法、函数和 类。
在幕后,所有导入语句基本上都映射到内置 __import__
例如:
import torch.nn as nn
变成
nn = __import__("torch.nn", globals(), locals(), [], 0)
类似地:
from torch import nn
变成
nn = __import__("torch", globals(), locals(), ["nn"], 0)
略有不同但功能相同。