когда импортирует модуль, и есть не нужно/хотите изменить имя (bar)?
Есть ли различия? Это имеет значение?
Ответ 1
Предполагая, что bar является модулем или пакетом в foo, нет никакой разницы, это не имеет значения. Оба утверждения имеют точно такой же результат:
>>> import os.path as path
>>> path
<module 'posixpath' from '/Users/mj/Development/venvs/stackoverflow-2.7/lib/python2.7/posixpath.pyc'>
>>> from os import path
>>> path
<module 'posixpath' from '/Users/mj/Development/venvs/stackoverflow-2.7/lib/python2.7/posixpath.pyc'>
Если bar не является модулем или пакетом, вторая форма не будет работать; вместо этого бросается трассировка:
>>> import os.walk as walk
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: No module named walk
Ответ 2
Единственное, что я вижу для второго варианта, это то, что вам понадобится столько строк, сколько нужно импортировать. Например:
import foo.bar as bar
import foo.tar as tar
import foo.zar as zar
Вместо простого выполнения:
from foo import bar, tar, zar
Ответ 3
Вы можете использовать как для переименования модулей, предположим, что у вас есть два приложения, у которых есть представления, и вы хотите их импортировать.
form app1 import views as views1
from app2 import views as views2
если вы хотите, чтобы множественное разделение запятой использовало импорт
>>> from datetime import date as d, time as t
>>> d
<type 'datetime.date'>
>>> t
<type 'datetime.time'>