2017-06-06 162 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很多次。每次它都會輸入sin,並在b中輸入uniform。這不是有效的,但我不知道解決方法(除了將a和b放在與master.py相同的文本文件中,我不想爲了調試的原因而這麼做)。我已經嘗試過在master.py中輸入用於導入sin和uniform的語句,但是當它調用a和b時,它會失敗,因爲不會導入sin和uniform。我想它必須在子程序中導入它們?我能否以某種方式在master.py中導入罪惡和制服並將它們傳遞給a和b,所以我不必每次都導入?

+1

「這不能有效」 - 你有什麼證據嗎? (即你的代碼運行緩慢嗎?) –

+2

請注意,一個簡單的解決方案(儘管我並沒有聲稱它實際上導致了性能差異),只是簡單地將'import'從函數中提取出來,直到'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) 

你不會需要做的random.uniformnumpy.sin的進口master.py因爲這些功能。它們被其他模塊中的其他函數調用;所以在其他模塊中需要導入。

同樣,this Python Wiki page on performance表示文件頂部的imports性能優越。