Pythonで「import *」(ワイルドカードインポート)が悪い考えである理由
Pythonでは、from sample import * のようにモジュールからすべてのメソッドを一括でインポートする「ワイルドカードインポート」は避けるべきとされています。その主な理由は以下の2点です。
- プログラム内で使用したメソッドが、どのモジュール(親モジュール)から来たのかを特定するのが難しくなる。
- インポートされたメソッドと同じ名前の関数を自由に定義できなくなり、名前の衝突が発生しやすい。
具体例
まず、sample.py というファイルに add という関数を定義してみましょう。
## sample.py ファイル
def add(a, b):
return a + b
このファイルを、次のPythonファイルと同じディレクトリに保存します。
## sample というモジュールがあると仮定します
from sample import *
def add(*nums):
return sum(nums)
print(add(1, 2, 3, 4, 5))
実行結果
上記のプログラムを実行すると、次の出力が得られます。
15
sample パッケージ内にも同じ名前の add メソッドが存在する場合、大規模なプログラムでは実際にどちらの関数が呼び出されたのかを特定するのが非常に困難になります。さらに、引数の違いによって予期しないエラーが発生する可能性もあります。
明示的にインポートする方法
先ほどのプログラムでは、sample パッケージのメソッドではなく、ローカルに定義した関数が優先的に呼び出されました。もし sample パッケージ側のメソッドを確実に呼び出したい場合は、以下のようにモジュール全体をインポートし、モジュール名を明示して呼び出す必要があります。
## sample というモジュールがあると仮定します
import sample
def add(*nums):
return sum(nums)
print(sample.add(1, 2))
実行結果
上記のプログラムを実行すると、次の出力が得られます。
3
まとめ
Pythonではモジュールを自由にインポートできますが、大規模なプログラムになると、インポートしたメソッド名とユーザー定義関数の名前が混同されやすくなります。名前の管理に十分な自信がある場合を除き、ワイルドカードインポートは避け、必要な要素だけを明示的にインポートするか、モジュール名を付けて呼び出すのが安全で可読性の高いコードにつながります。
-
Pythonを学ぶべき10の理由|初心者からプロまで選ばれる万能言語の魅力
Pythonは無料で学びやすい言語Pythonは、ダウンロードから利用、コーディングまで完全に無料で使えるプログラミング言語です。コマンドの多くがシンプルな英語で構成されているため、覚えやすく書きやすいのが特徴です。コードの可読性が高く、基礎知識が少しあれば、コードを読むだけでも多くのことを学べます。標準ライブラリが豊富に用意されており、複雑なアプリケーションも簡単に実装できます。Pythonは初心者を意識して設計された言語であり、インデント(空白)と一般的な表現を採用することで、煩わしい変数宣言や読みにくい波括弧の必要性を排除しました。プログラミングの第一歩として最適Pythonは、プログラ
-
なぜPythonは他の言語より遅いのか?実行速度の違いを徹底解説
Pythonはスクリプト言語であり、Cはコンパイル型のプログラミング言語です。C/C++がPythonと比べて高速なのは、この実行方式の違いによるものです。Pythonスクリプトを実行する場合、インタプリタがコードを1行ずつ解釈しながら出力を生成します。一方、Cでは事前にコンパイラがソースコードをコンパイルし、ハードウェアに最適化された実行ファイルを生成します。また、Javaや.NETなどの言語では、JIT(Just-In-Time)コンパイラが実行時にバイトコードをネイティブコードへ変換するため、Javaバイトコードや.NETバイトコードはPythonよりも高速に動作します。CPythonに