簡體   English   中英

將太多參數傳遞給 Python 中的函數

[英]Passing too many arguments to a function in Python

我正在開發一個程序,該程序執行滲透系統的蒙特卡羅模擬(使用 python)。 為了能夠從 GUI (tkinter) 運行它並使用多個進程,我在 main() 函數中定義了模擬的主要部分。 問題是,這個程序是一個物理模擬,它接受許多參數(10+)。 從 main() 調用的一些函數也需要很多參數並且被調用很多很多次。 例如,在我的 main() 中,我有一個 generate_wire() 函數,它接受 8 個參數,例如 wire_mean_length、wires_distribution 等。這個函數被調用了數百萬次。

這會影響程序的效率嗎? 它是否應該修復,如果是,如何修復?

編輯:代碼的基本結構如下:

def generate_wire("8 parameters"):
     "generating a wire according to the parameters"

def main("main parameters"):
     for _ in range(nbr_sim):
         while True:
         generate_wire("8 parameters taken from the main parameters")
         "Various calculations"
         if percolation is True:
             break

if __name__ == '__main__':
     "GUI code"
     "Run button calls the main function with parameters from GUI entries"

實際上,與其他設計相比,這不會影響程序的運行時間

您可以將所有參數放入字典或自定義類中並傳遞它以使邏輯更清晰

您可以將函數中的邏輯直接提升到循環中,這將減少查找發生的頻率

有關局部變量查找的更多信息

def generate_wire_wrapper("8 parameters"):
    for _ in range(nbr_sim):
        "logic to generate a wire"
        "various calculations"

def main("main parameters"):
    generate_wire_wrapper("8 parameters taken from the main parameters")

但是,改進設計將是您真正的盟友

與其在循環中數千次調用相同的函數,不如考慮

  • 使用某種工作人員池來並行處理
  • 利用(或在必要時編寫)C 中的邏輯來使操作更高效,科學圖書館的映射方法會這樣做以提高效率,其中一部分也是通過在每一步(Pandas .apply方法)做更多的工作來.apply這樣做,例如)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM