2012-12-26 45 views

答えて

16

変数に干渉し、メモリを占有する名前で名前空間を汚染します。
また、プログラムがモジュールをロードする必要があるため、起動時間が長くなります。

いずれにしても、コードを書くのと同じように、コードが変更されたときに、import osの書き込みと削除を続けることができるように、私はあまり神経症にはなりません。 PyCharmとしてのIDEの中には未使用のインポートを検出するものがあるので、コードが完成した後、あるいはほぼ完了した後に依存することができます。

+1

したがって、不要なインポートを除いて、プログラムの処理に時間がかかります。右 ? –

+0

そうですよね。 – joaquin

+0

スタートアップの遅延時間は、 'print 'Hello、__name__でファイルの束を作り、それらをインポートすることで視覚化することができます。インポートされたものは、少なくとも1回は解析されなければならず、pyc /キャッシュバージョンは実行サイクルごとに少なくとも1回解釈されます。これは、特にインポートされたファイルが、さらに多くのファイルをインポートする他のファイルをインポートする場合に、少し苦労する可能性があります。 – David

6

は、たとえば、あなたが考えるよりtest.pyでこのコードを定義するために少し難しく、「未使用」であるかもしれない:

import sys 
import unused_stuff 
sys.exit(0) 

unused_stuffが未使用のようですが、それがなかった場合は含まれて:

import __main__ 
def f(x): print "Oh no you don't" 
__main__.sys.exit = f 

次に、test.pyを実行しても、目に見えるものは期待できません。

+0

誰もこのようなコードでライブラリを書いていないことを願っています。この輸入は、OPがそのモジュールを**使用することを計画していても危険です。 – joaquin

+2

@joaquinこれは極端な例ですが、ロードされたときに微妙な副作用があるモジュールがないことを意味するわけではありません。それは副作用の簡単な例として意味されていました:) – Flexo

+3

私は私の個人的なライブラリには、唯一のAPIがインポートされている2つのモジュールがあります。つまり、何も呼び出して何もインポートされません。最初のプログラムはnice.pyです。プログラムは低いプロセス優先度で実行されます。もう1つはtiming.pyです。このプログラムは、実行中のプログラムが終了したときの経過時間とタイムスタンプを報告するatexitハンドラをインストールします。どちらも未使用のように見えますが、実際には、彼らは超ミニマリストAPIを持っています。 – PaulMcG

関連する問題