使用すべきですか
from foo import bar
OR
import foo.bar as bar
モジュールのインポートで、かつ名前を変更する必要がない/希望しない(bar
)?
違いはありますか?それは重要ですか?
bar
がfoo
のモジュールまたはパッケージであると仮定すると、違いはありません、それは重要ではありません。 2つのステートメントの結果はまったく同じです。
>>> 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
がモジュールまたはパッケージでない場合、2番目の形式は機能しません。代わりにトレースバックがスローされます。
>>> import os.walk as walk
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: No module named walk
asを使用してモジュールの名前を変更できます。ビューを持つ2つのアプリがあり、それらをインポートする場合
from 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'>
2番目のオプションについて確認できる唯一のことは、インポートするものと同じ数の行が必要になることです。例えば :
import foo.bar as bar
import foo.tar as tar
import foo.zar as zar
単に行う代わりに:
from foo import bar, tar, zar
これは遅い応答であり、 Pythonの 'import a.b as b'と 'from a import b'の違いは何ですか
この質問には重複としてフラグが付けられていますが、2つのメカニズムには重要な違いがあり、他のメカニズムでは対処されていません。
from foo import bar
は、名前空間bar
から現在の名前空間にfoo
と呼ばれるanyオブジェクトをインポートします。
import foo.bar as bar
は、foo.bar
というインポート可能なオブジェクト(パッケージ/モジュール/ネームスペース)をインポートし、エイリアスbar
を与えます。
違いは何ですか?
以下を含む__init__.py
を持つfoo
というディレクトリ(パッケージ)を取得します。
# foo.__init__.py
class myclass:
def __init__(self, var):
self.__var = var
def __str__(self):
return str(self.__var)
bar = myclass(42)
一方、alsobar.py
と呼ばれるfoo
内のモジュールもあります。
from foo import bar
print(bar)
与える:
42
一方、
import foo.bar as bar
print(bar)
与える:
<module 'foo.bar' from '/Users//..../foo/bar.py'>
したがって、import foo.bar as bar
の方が安全であることがわかります。