ホームページ >バックエンド開発 >Python チュートリアル >文字列変数からモジュールをインポートする場合、Python の `__import__` は標準の `import` とどう違うのですか?

文字列変数からモジュールをインポートする場合、Python の `__import__` は標準の `import` とどう違うのですか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-12-05 05:39:09960ブラウズ

How Does Python's `__import__` Differ from Standard `import` When Importing Modules from String Variables?

「__import__」を使用した文字列変数からのモジュールのインポート: 通常のインポート ステートメントとの違い

Python では、import関数を使用すると、文字列変数からモジュールを動的にインポートできます。ただし、これにより、通常の import ステートメントを使用する場合と比較して、予期しない結果が生じる可能性があります。

次の例を考えてみましょう:

import matplotlib.text as text
x = dir(text)  # Get attributes of matplotlib.text

i = __import__('matplotlib.text')
y = dir(i)  # Get attributes of the imported module

j = __import__('matplotlib')
z = dir(j)  # Get attributes of matplotlib

結果のリストを比較すると、y オブジェクトに次のものが混在していることがわかります。 matplotlib と matplotlib.text の属性は含まれていますが、matplotlib.text.

This からのメイン クラスに関する必要な情報が欠落しています。この動作は、import 関数のメカニズムによって説明されます。デフォルトでは、文字列引数で指定された最上位モジュールをインポートします。この場合、「matplotlib.text」は matplotlib.text モジュールを指しますが、import は代わりに matplotlib をインポートします。

この問題に対処するには、3 番目の引数として空の文字列を指定できます。次の変更されたコードに見られるように、__import__ に追加します。

i = __import__('matplotlib.text', fromlist=[''])
y = dir(i)  # Get attributes of matplotlib.text

これにより、 import を使用して matplotlib.text モジュールを具体的にインポートすると、目的の属性リストが含まれる y が得られます。

別のアプローチは、Python 3.1 の importlib モジュールを使用することです:

import importlib

i = importlib.import_module("matplotlib.text")
y = dir(i)  # Get attributes of matplotlib.text

このメソッドは、文字列からモジュールをインポートするためのより一貫性のある簡単な方法を提供します。 variables.

注:

  • サブフォルダー (例: ./feature/email.py) からインポートする場合、importlib 構文は importlib.import_module(" feature.email").
  • Python より前3.3 では、importlib.import_module.
を使用してインポートするには、フォルダー内に __init__.py ファイルが存在する必要がありました。

以上が文字列変数からモジュールをインポートする場合、Python の `__import__` は標準の `import` とどう違うのですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。