В python чем отличается «import foo.bar as bar» от «import foo import bar»? - PullRequest
3 голосов
/ 28 апреля 2020

Я вижу это соглашение в 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

Редактировать : То есть для общего случая c:

import foo.bar as bar    # [1]
from foo import bar      # [2]

Может ли существовать код, который относится к bar так, что он будет работать с [1], а не [2] (и наоборот)? Т.е. есть ли функциональная разница между этими двумя способами импорта?

Ответы [ 2 ]

4 голосов
/ 28 апреля 2020

За кулисами все операторы импорта по существу отображаются на встроенную __import__, например:

import torch.nn as nn

становится

nn = __import__("torch.nn", globals(), locals(),  [], 0)

аналогично:

from torch import nn

становится

nn = __import__("torch", globals(), locals(), ["nn"], 0)

Слегка отличается, но функционально эквивалентен.

Ссылка: https://docs.python.org/3/library/functions.html# импорт

0 голосов
/ 28 апреля 2020

import blank as blank позволяет ссылаться на модуль как это имя во всей программе.

from blank import blank импортирует определенные c методы, функции и классы из модуля.

...