如何在Python类中重用返回值,而不必每次都重新运行该函数?

如何在Python类中重用返回值,而不必每次都重新运行该函数?,python,function,class,Python,Function,Class,我在类中重用函数时遇到问题。我希望获得函数的返回值,而不必每次使用它时都重新运行它。在课堂上这样做的最好方式是什么 谢谢大家! class Test(): 定义初始化(自): #self.my_list=my_list() 通过 @静力学方法 定义我的列表(): set_list=[1,2,3,4,5,6] 打印('您没有重新引用') 返回集合列表 @静力学方法 def func_测试(): func_list=Test.my_list() 返回函数列表 @静力学方法 def func_test

我在类中重用函数时遇到问题。我希望获得函数的返回值,而不必每次使用它时都重新运行它。在课堂上这样做的最好方式是什么

谢谢大家!

class Test():
定义初始化(自):
#self.my_list=my_list()
通过
@静力学方法
定义我的列表():
set_list=[1,2,3,4,5,6]
打印('您没有重新引用')
返回集合列表
@静力学方法
def func_测试():
func_list=Test.my_list()
返回函数列表
@静力学方法
def func_test2():
func_list=Test.my_list()
返回函数列表
@静力学方法
def print_func():
打印Test.my_list()
打印测试。函数测试()
print Test.func_test2()
返回
Test.print_func()
以下是我目前的结果:

you are not referencing 
[1, 2, 3, 4, 5, 6]
you are not referencing
[1, 2, 3, 4, 5, 6]
you are not referencing
[1, 2, 3, 4, 5, 6]
我会得到这个结果

you are not referencing 
[1, 2, 3, 4, 5, 6]
[1, 2, 3, 4, 5, 6]
[1, 2, 3, 4, 5, 6]
如果您的函数是纯函数(没有副作用/相同的输入总是产生相同的输出),您可以使用memonization with,它为给定的输入集缓存输出。(这是由dict支持的,因此参数必须是可散列的。)

如果函数不是纯函数(如内部调用
print()
的示例),则添加此装饰器将改变行为:将跳过以下调用的副作用。在返回可变值(如列表)时也要非常小心,因为将返回相同的缓存对象,即使有任何东西对其进行了变异,这可能不是您所期望的

import functools

class Test():

    def __init__ (self):
        # self.my_list = my_list()

        pass


    @staticmethod
    @functools.lru_cache(maxsize=128, typed=False)
    def my_list():
        set_list = [1, 2, 3, 4, 5, 6] 
        print ('you are not refrencing')

        return set_list

    @staticmethod
    def func_test():
        func_list = Test.my_list()
        return func_list


    @staticmethod
    def func_test2():
        func_list = Test.my_list()
        return func_list

    @staticmethod
    def print_func():
        print (Test.my_list())
        print (Test.func_test())
        print (Test.func_test2())

        return

Test.print_func()
如果您使用的是python 2.7,则可以尝试此代码

from repoze.lru import lru_cache

@lru_cache(maxsize=500)
def fib(n):
    if n < 2:
        return n
    return fib(n-1) + fib(n-2)
从repoze.lru导入lru\u缓存
@lru_缓存(最大大小=500)
def纤维(n):
如果n<2:
返回n
返回fib(n-1)+fib(n-2)

将变量设置为类属性?使用装饰器。在init方法中设置变量Test.my_列表,这将把变量设置为类变量,然后您可以通过引用静态方法中的Test.my_列表来使用。事实上,你不需要把它放在一个类中,但用你所拥有的东西,你可以走这条路。就连我都不知道。嗨,Jainil和Gilch,谢谢你的快速回复,不幸的是,我使用的是python 2.7,我不能使用@functools.lru_缓存(maxsize=128,typed=False)否则它工作得很好我正在尝试LahasaDad提到的在init方法中设置变量Test.my_列表,并在其他函数中引用它,但我不断出错。有人能告诉我怎么做吗,非常感谢你的回应!我们没有安装2.7,但您可以尝试从github恢复库。