Python では、謎めいたコマンド「import *」により、モジュールのリソースへの前例のないアクセスが許可されます。指定されたモジュールだけでなく、それを含むフォルダー内にある重要な __init__.py ファイルもインポートされます。その結果、祝福された __init__.py モジュールは現在の名前空間に不可欠になります。
インポート の機能により、「から」を明示的に宣言する必要があります。 project.model import __init__」は蒸発します。 project.model モジュールとその神聖な __init__.py ファイルの両方にすべてを含めるには、単純な「from project.model import 」で十分です。
import * の魅力は、指定されたモジュールから現在の名前空間にすべての名前付きオブジェクト (アンダースコアで始まるオブジェクトを除く) をインポートできることです。 これにより、名前の前にモジュールの識別子を付ける必要がなく、インポートされたオブジェクトに簡単にアクセスできるようになります。
たとえば、次のスニペットを考えてみましょう。
from math import *
この魔法の呪文により、事前の知人なしで円周率の力をシームレスに行使する:
pi 3.141592653589793
しかし、輸入品 ※定価になります。これにより、名前空間の衝突の危険が生じ、現在のスコープ内の既存の変数が上書きされる可能性があります。さらに、ターゲット モジュールに大量のオブジェクトが含まれている場合、非効率であることが判明する可能性があります。最後に、そしておそらく最も重要なことは、コードの自己文書化の性質を抑制し、変数、メソッド、クラスの起源が謎に包まれたままになることです。
したがって、賢明です。私たちの間では、import * はアドホック テスト用に予約されており、運用コードではより明示的な代替手段が好まれています。賢明な選択の 1 つは、必要なオブジェクトのみを明示的にインポートすることです:
from math import pi
あるいは、別の名前空間の下でモジュール全体をインポートすることも賢明な妥協策です:
import math as m
import * の謎を解明するには、その仕組みを理解することが不可欠です。デフォルトでは、すべての名前付きオブジェクト (アンダースコアで始まるオブジェクトを除く) がインポートされます。ただし、指定されたモジュールが all 変数を定義している場合は、優先順位が与えられ、その変数内で列挙された名前のみがインポートされます。
多くの標準 Python ライブラリは、urllib モジュールのユビキタス拡張である urllib.request などのサブモジュールに編成されています。 import * from urllib はこれらの神聖なホールを通過しないことに注意することが重要です。これらにアクセスするには、別の import ステートメントが必要です:
from math import *
謙虚な import * コマンドは非常に強力で、モジュールの内容全体を現在の名前空間にインポートする機能を提供します。ただし、名前空間の衝突、非効率性、自己文書化の欠如などの危険に巻き込まれないように、注意して行使する必要がある力です。実稼働コードの場合、より明示的で構造化されたインポートの実践が、静けさと明快さへの道です。
以上がPython で「import *」を避けるべき理由は何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。