0

私はPythonを学んで練習していますが、途中で、Pythonパッケージと、モジュールで他のモジュールまたはパッケージにインポートする方法について読んでいます次のシナリオを想定しています。

私はパッケージを持っています、

Video/
    __init__.py
    formats/
        __init__.py 
        mkv.py  
        mp4.py
    length/
        __init__.py
        morethan20min.py
        lessthan20min.py

いいえ

__init__.py

定義していません

__all__

次のように import ステートメントがあるとどうなりますか

import Video.format.mkv
import Video.formats.* 

私はすでに最初のステートメントでmkvモジュールをインポートしているので、2番目のインポートステートメントの実行後に正確に何が起こるか、言及されたリンクを読んだ後、概念を理解できませんでした。

4

1 に答える 1

2

あなたがするとき

from whatever_package import *

最初に、パッケージ__init__.pyがまだ実行されていない場合は実行されます。(既に実行している場合import whatever_package.something_specific、パッケージ__init__.pyは既に実行されています。)

次に、リストwhatever_package.__init__が定義されていない場合__all__、インポートはオブジェクトの現在のすべてのコンテンツを取得しwhatever_packageます*。これは、で定義されたもの__init__.pyと、プログラムで実行されたコードによって既に明示的にインポートされているサブモジュールです。たとえば、が空whatever_packageの場合、次のようにします。__init__.py

import whatever_package.something_specific
from whatever_package import *
import whatever_package.other_thing

に関連する他の import ステートメントwhatever_packageがプログラムに存在しない場合、import *は を取得しますが、 などsomething_specificの の他のサブモジュールは取得しません。whatever_packageother_thing


*パッケージまたは通常のモジュールからインポートするかどうかにかかわらず、リストimport *のないものには標準であるため、アンダースコアで始まるものはすべて除外します。__all__

于 2016-08-02T16:25:09.277 に答える