2011-01-25 18 views
3

私はここで新しく、この質問をどのようにするかわからないので、すぐに潜んでいきます。私が書くすべての関数の始めにimport文を使うべきですか?その関数のスコープに必要なさまざまなモジュール/関数をすべてインポートしますか?すなわちPythonでインポートされたモジュール/関数のスコープ

def func1() 
    import os.path 
    print func(2) 
    do something with os.path 

def func2() 
    import os.path 
    do something with os.path 

これは、メモリオーバーヘッドやその他のオーバーヘッドを増やすか、ローカル名をすでに読み込まれたオブジェクトにマッピングするだけのインポート文ですか?これを行うより良い方法がありますか? (チュートリアルなどへのリンクは大歓迎です。私はしばらく探していましたが、これに対して良い答えが見つかりません)

+0

となります。これは重複しています。最初の検索。二番目。 'timeit'を使います。それから、あなたは答えが各機能で時間を浪費しないことがわかります。 –

+0

[python import coding style](http://stackoverflow.com/questions/477096/python-import-coding-style) –

+2

@Sの複製が可能です。 Lott。その質問に対する先頭に立った答えは技術的に間違っています。私はそれに新しいものを追加しました。問題は、使用されるタイミング手法に非常に欠陥があり、ローカルにアクセスしてグローバルにアクセスする際のコストの差異を考慮していないことです。 – aaronasterling

答えて

6

モジュールは初めて読み込まれるときに処理されます。その後のインポートではローカルスコープへの参照のみがコピーされます。ただし、可能な場合は、モジュールの上部にインポートするのが最善の方法です。詳細はPEP 8を参照してください。

+0

答えをありがとう、まさに私が知りたかったもの!無駄な時間を無駄にして申し訳ありません、私はしばらく検索しました。私は時間が何であるか分からないが、私は見つけ出すだろう。乾杯! – GlenS

+0

PEP 8へのポインタをありがとう。 – GlenS

+0

@GlenS:PEP8を学んでください。早くコードを書くと、すぐに他のPythonコーダーに見えるようになります。 – mlissner

10

Usuallyすべてのインポートがファイルの先頭に置かれます。関数本体のモジュールをインポートすると、そのスコープ内のモジュールimportは、

def f(): 
    import sys 
    print 'f', sys.version_info 

def g(): 
    print 'g', sys.version_info 

if __name__ == '__main__': 
    f() # will work 
    g() # won't work, since sys hasn't been imported into this modules namespace 
関連する問題