我正在寫一個類,它使用幾個非成員函數(所有返回列表)的結果多次。複製一個函數的結果作爲一個類變量或多次調用它Python
我想知道處理這個問題的標準方式是 - 我最初的想法是寫的線沿線的東西:
class Y_and_Z_matrices(object):
def __init__(self, roots_p, roots):
self.deltas = deltas(roots)
self.deltas_p = deltas(roots_p)
self.thetas = thetas(roots)
self.thetas_p = thetas_p(roots_p)
self.epsilons = epsilons(roots)
self.epsilons_p = epsilons(roots_p)
def _func_a (self, roots_p, roots, param):
#refers to the member variables
def _func_b (self, roots_p, roots, param):
#refers to the member variables
def Ymatrix(self, roots_p, roots):
#refers to the member variables
def Zmatrix(self, roots_p, roots):
#refers to member variables
我以爲,只有調用該函數一次,而不是多次將更快,但作爲deltas
,thetas
和epsilons
函數都很小,我不確定它的問題。
現在我想知道python如何在這種情況下工作,這比在每個函數中調用deltas
函數我會使用它們更好嗎?保存列表roots
並引用它們而不是將它們傳遞給許多函數會更好嗎?
I.e.什麼是(DIS)改寫上述的優點:
class Y_and_Z_matrices(object):
def __init__ (self, roots_p, roots, param):
self.roots_p = roots_p
self.roots = roots
self.param = param
def _func_a (self):
#uses 'roots_p', 'roots', and 'param' member variables
#passes 'roots' and 'roots_p' to 'deltas', 'epsilons' and 'thetas' when needed
def _func_b (self):
#uses 'roots_p', 'roots', and 'param' member variables
#passes 'roots' and 'roots_p' to 'deltas', 'epsilons' and 'thetas' when needed
def Ymatrix(self):
#uses 'roots_p', and 'roots' member variables
#passes 'roots' and 'roots_p' to 'deltas', 'epsilons' and 'thetas' when needed
def Zmatrix(self):
#uses 'roots_p', and 'roots' member variables
#passes 'roots' and 'roots_p' to 'deltas', 'epsilons' and 'thetas' when needed
我喜歡寫在第二種方式中類,但唯一的原因是因爲我喜歡的功能,以儘可能小的參數列表的外觀儘可能,我不喜歡我的__init__
功能看起來如此笨拙。
總結問題: -
它是客觀的更好或更壞到功能的回報保存爲一個成員變量,而不是調用函數在多個成員函數?
保存參數(在整個課程中將保持相同)或者使用所需參數調用函數的客觀上更好還是更差?
或者
難道只是有一個權衡的地方(如果有,在哪裏)?
對我來說似乎很好:你第一次避免計算開銷,特別是如果「希臘字母」的計算是冗長的。但是,爲什麼不在init中分配'roots','roots_p' *和*其他變量到'self'?這避免了方法調用中的額外參數;你可以定義一個私人方法,設置增量等,並從'__init__'調用,如果你發現'__init__'太笨重(我不認爲它是)。 – Evert
這是一個權衡。您必須在初始化程序中花費額外的精力,並編寫額外的代碼行;作爲交換,你會獲得潛在的速度提升。通常的建議是,除非您嘗試修復它們,否則您不應該擔心性能問題。 – katrielalex
感謝你們兩位 - 我應該寫得更清楚的主要觀點是我不確定它會更快,還是我對代碼的工作方式做出錯誤的假設。 – Apple