将一个函数的返回传递给另一个

时间:2019-07-03 12:59:10

标签: python class

我有一个问题,但我不知道该如何解决。假设您具有三个功能,即功能1,功能2和功能3。在功能1中,您需要执行一些操作,并给出特定的返回值,该返回值将用作第二个功能的输入。在第二个函数中,您将进行一些特定的计算,并以return结束,然后将其传递给第三个函数

我的问题是,一旦我将函数1的返回值传递给函数2,就重复了函数1中的所有计算(这里是这种情况下的计算,有多个图)函数2到3同样如此,现在我从功能1和功能2获得结果。希望您能理解我的意思。

我想要的只是func 1对func 2的返回值,func 2对3的返回值,而不是整个函数体。

这是我的代码:

class test:
    def __(self)__:
        self.attribute1=pd.read_csv(...)
        self.attribite2=pd.read_csv(...)

    def func1(self):
        plt.plot(a,b)
        plt.plot(c,d)
        return x

    def func2(self):
        self.data_2=self.func1()
        plt.plot(e,f)
        plt.plot(g,h)
        return y

    def func3(self):
        self.data_3=self.func2()
        plt.plot(i,j)

data_test=test()
print(data_test.func2())

我的问题是(让我们关注func2)。如果我使用func1的输入并执行func2的代码,我也会得到两个图。我不想那样。我只想查看图(e,f)和图(g,h),而不是图(a,b),图(c,d),图(e,f)和图(g,h)

2 个答案:

答案 0 :(得分:1)

您说您“将函数1的返回传递给函数2”,但是您从未这样做。

您不会在任何地方传递任何结果,而且您​​的函数都不会接受任何输入(self除外)-您是在每个函数中直接调用这些函数。
换句话说,每次您呼叫function2时,它都会呼叫function1,并且每次您呼叫function3时,它都会呼叫function2,而后者又呼叫function1

与您的描述匹配的代码如下:

class test:
    def __(self)__:
        self.attribute1=pd.read_csv(...)
        self.attribite2=pd.read_csv(...)

    def func1(self):
        plt.plot(a,b)
        plt.plot(c,d)
        return x

    def func2(self, a):
        self.data_2 = a
        plt.plot(e,f)
        plt.plot(g,h)
        return y

    def func3(self, x):
        self.data_3 = x
        plt.plot(i,j)
        return z

data_test = test()
print(data_test.func3(data_test.func2(data_test.func1())))

答案 1 :(得分:1)

您的类定义未遵循OOP整洁的设计,为此,每种方法都应执行最原子的任务。

您的方法func1func2func3,它们都至少执行两项任务:绘制某些内容并返回其他内容。

考虑更改您的类,以便每个方法都只能做一件事情,例如定义公共APIS和私有方法:

class test:
    def __(self)__:
        self.attribute1 = []
        self.attribite2 = []

    def _func1(self):
        return x

    def _func2(self):
        self.data_2 = self._func1()
        return y

    def _func3(self):
        self.data_3 = self._func2()

    def func2(self):
        self._func2()
        plt.plot(e,f)
        plt.plot(g,h)

    def func3(self):
        self._func3()
        plt.plot(e,f)
        plt.plot(g,h)

data_test=test()
data_test.func2()

通过这种方式func2func3是公共api(又名:旨在从班级外部调用),可以“完成工作”(在self.data_2和{{ 1}})AND图; self.data_3_func2是私有方法(也就是仅类本身应使用的方法)只能执行工作。 现在,调用_func3将使用方法func2_func1,但仅绘制_func2中定义的内容。