
インポートはどうなの?
この再利用の話は素晴らしいわ。
だけど、
import
文の再利用について
忘れているんじゃないの?
いいえ、忘れていません。
log_request
関数のコードの再利用を検討
し た 際 に
import mysql.connector
文 の
ことは忘れていませんでした。
この文は特殊な扱いをしたかったので、わざ
と抜かしました。問題は、この文を再利用した
くないということではありません。この文はこ
の関数のブロックに置くべきではないのです!
インポート文の場所に注意する
数ページ前に、経験豊富な
Python
プログラマなら
log_request
関数のコードを見て、文句を
言うだろうと述べました。それは、この関数のブロックに
import mysql.connector
という
1
行があるからです。先ほどの「試運転」でこのコードが正しく動作するにもかかわらずです。では、
何が問題なのでしょうか?
この問題は、
import
文の場所に関係があります。インポートされるモジュールは完全に読み込
まれてからインタプリタが実行します。この動作は、
import
文が関数の外側で発生するときには
問題ありません。インポートされるモジュールは(通常)1 回だけ読み込まれ、1 回だけ実行されるか
らです。
しかし、
import
文が関数内にあると、関数を呼び出すたびに読み込まれて実行されます。これ
では無駄が多すぎます(これまで説明してきたように、インタプリタは関数内に
import
文を入れ
るのを妨げないにもかかわらず) ...