将函数的结果复制为类变量或多次调用Python

时间:2013-02-04 13:52:35

标签: python class

我正在编写一个类,它使用了一些非成员函数(都返回列表)的结果多次。

我想知道处理这个问题的标准方法是什么 - 我最初的想法是写下以下内容:

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

我认为只调用一次而不是多次调用函数会更快,但由于deltasthetasepsilons函数都很小,我不确定它的事项。

现在我想知道python如何在这样的情况下工作,这比在我将使用它们的每个函数中调用deltas函数更好吗?保存列表roots并引用它们而不是将它们传递给许多函数会更好吗?

即。重写上述内容的(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__函数看起来很笨拙。

总结一下这个问题: -

将函数的返回值保存为成员变量而不是在多个成员函数中调用函数是客观上更好还是更糟?

保存参数(在整个班级中是否相同)或使用所需参数调用函数是客观上更好还是更差?

或者

只是在某个地方进行权衡(如果是,在哪里)?

1 个答案:

答案 0 :(得分:1)

Python3的最新版本有一个很好的解决方案:functools'lru_cache。这个装饰器允许你让Python记住一个特定参数组合的函数调用结果(这假设如果使用相同的参数,所述函数的结果将是相同的。)