2017-06-06 4 views
0

私がプロジェクトを作っているとしましょう、マスターファイルであるmaster.pyとしましょう。Pythonの効率性:私がインポートしているもののものをインポートしていますか?

#this is master.py 
import a 
import b 
for i in range (whatever): 
for j in range (whatever): 
    a.main(i) 
    b.main(j) 

a、bは、私が作った他のサブ機能であり、(簡単に微調整のための)他のテキストファイルです。

#this is a.py 
def main(i): 
from numpy import sin 
return sin(i) 

及びB::

#this is b.py 
def main(j): 
from random import uniform 
return uniform(0, j) 

master.pyは、関数aを呼び出し、多くの時間bの。今度は、あるとしましょうそれが起こるたびに、それはaで罪を、bで罰金を輸入します。これは効率的ではありませんが、私はそれを回避する方法はわかりません(aとbをmaster.pyと同じテキストファイルに入れますが、これはデバッグの理由からしたくありません)。代わりにmaster.pyにsinとuniformをインポートするためのステートメントを入れようとしましたが、aとbを呼び出すと、sinとuniformがインポートされないので失敗します。私はサブルーチンでそれらをインポートする必要があると思いますか?どういうわけか、master.pyで罪と統一をインポートし、それをaとbに渡すことができるので、毎回インポートする必要はありませんか?

+1

「これは効率的ではない」 - あなたはそのための証拠を持っていますか? (つまり、あなたのコードは、結果としてゆっくり実行している?) –

+2

注簡単な解決策は、(私はそれが実際にPERFの違いを主張していないよが)単純な機能のうち、とまで 'import'sをホイストすることです'a.py'と' b.py'のトップレベルです。 –

+0

それが不明な場合は申し訳ありませんが、それはちょうど発言でした。同じことを何度も何度もインポートするのは効率的ではないと思います。私は実際に私のマスタープログラムを実際に構築していません、私はそれを効率的にする方法を計画しています。 – iammax

答えて

1

あなたはa.pyb.pyの一番上にインポートしようとしたことがありますか?

# a.py 
from numpy import sin 

def main(i): 
    return sin(i) 

と:

# b.py 
from random import uniform 

def main(j): 
    return uniform(j) 

あなたはそれらの機能のでmaster.pyrandom.uniformnumpy.sinの輸入を行う必要がありません。他のモジュールの他の関数によって呼び出されます。他のモジュールではインポートが必要です。

同様に、this Python Wiki page on performanceは、ファイルの先頭にimportsは、パフォーマンスのために優れていることを示しています。

関連する問題