返回具有多个输入参数的函数的值以在同一类中具有多个参数的另一个函数中使用?

Posted

技术标签:

【中文标题】返回具有多个输入参数的函数的值以在同一类中具有多个参数的另一个函数中使用?【英文标题】:Returning the value of a function with multiple input parameters to use in another function with multiple parameters inside the same Class? 【发布时间】:2018-10-28 23:31:00 【问题描述】:

现在我知道有很多重复的人在问类似的问题[1][2][3][4][5],但是我相信他们都没有在另一个具有多个参数的函数中调用具有多个输入参数的函数同一类;这恰好是我的特殊问题(除非我在搜索过程中错过了它)。

下面是一个最小的工作示例,我试图在 function2 中使用 function1 的结果:

class Something():
    def __init__(self,input1, input2, input3):
        self.input1 = input1
        self.input2 = input2
        self.input3 = input3

    def function1(self, input4, input5, input6):
        something = (self.input1 +  self.input2 + self.input3)+input4+input5+input6
        return something

    def function2(self, input7, input8):
        something2 = self.function1(self.input4, self.input5, self.input6)+input7+input8
        return something2        

a = Something(1,2,3)
print(a.function1(4,5,6))
print(a.function2(7, 8))

Function1 打印正常,但是当我调用 Function2 时,出现错误:

AttributeError: 'Something' object has no attribute 'input4'

我可能在这里遗漏了一个简单的步骤,但是我似乎无法弄清楚如何在 function2 中使用 function1 的结果,而无需再次重新定义所有输入参数。

【问题讨论】:

【参考方案1】:

input4 是一个参数,其范围是function1 的本地变量。这同样适用于input5input6。您需要使用__init__ 中的self 分配它们,以便使用self 实例的类方法可以访问它们。如果您希望这些变量可以访问而无需在参数列表中重新定义它们,您可以使用 selffunction1 中分配它们

class Something():
    def __init__(self,input1, input2, input3):
        self.input1 = input1
        self.input2 = input2
        self.input3 = input3

    def function1(self, input4, input5, input6):
        self.input4 = input4
        self.input5 = input5
        self.input6 = input6
        something = (self.input1 +  self.input2 + self.input3)+input4+input5+input6
        return something

    def function2(self, input7, input8):
        something2 = self.function1(self.input4, self.input5, self.input6)+input7+input8
        return something2        

a = Something(1,2,3)
print(a.function1(4,5,6))
print(a.function2(7, 8))

# 21 
# 36

【讨论】:

【参考方案2】:

self.input4 没有意义,因为它不是您在__init__ 中提供给self 的字段。

如果你想在function2中使用self.input4,那么__init__或者function1需要分配self.input4 = # something

【讨论】:

【参考方案3】:

只需向function2 添加另一个参数,您就可以将function1 的结果传递给function2,或者在function2 的参数中调用function1

class Something():
    def __init__(self,input1, input2, input3):
        self.input1 = input1
        self.input2 = input2
        self.input3 = input3

    def function1(self, input4, input5, input6):
        something = (self.input1 +  self.input2 + self.input3)+input4+input5+input6
        return something

    def function2(self, input7, input8, res1):
        something2 = res1+input7+input8
        return something2

a = Something(1,2,3)

# just save the result of function1 and pass it to function2
res1 = a.function1(4,5,6)
print(res1)
print(a.function2(7, 8, res1))

# or just call function1 in the arg list of function2
print(a.function2(7, 8, a.function1(4,5,6)))

【讨论】:

【参考方案4】:

“范围”是一个花哨的术语,表示可访问性,通常是变量的生命周期。在function2 中看不到input4,因为它仅在function1 中由名称input4 定义。如果你想在另一个函数中使用它,你应该将它作为参数传递或保存为状态。

您的第二个函数实际上并不直接依赖于对象的内部状态,因此您可以将其拆分为与您的类分开的函数。 function1 应该有一个含义并将该含义传递给您的其他函数。

# A separately reusable function, not dependent on Something
def function2(foo, input7, input8):
    something2 = foo + input7 + input8
    return something2        

class Something():
    def __init__(self,input1, input2, input3):
        self.input1 = input1
        self.input2 = input2
        self.input3 = input3

    def function1(self, input4, input5, input6):
        something = (self.input1 +  self.input2 + self.input3)+input4+input5+input6
        return something

a = Something(1,2,3)
print(a.function1(4,5,6))
print(function2(a.function1(4,5,6), 8))

【讨论】:

以上是关于返回具有多个输入参数的函数的值以在同一类中具有多个参数的另一个函数中使用?的主要内容,如果未能解决你的问题,请参考以下文章

python 格式化单个值以在符合RFC4180的CSV文件中使用。使用逗号将这个函数返回的多个值连接到crea

Java方法重载

如何从 Matlab 调用具有多个输出的 C++ 函数?

具有两个或多个返回参数的函数注释

重载与重写

Java中方法的重载与重写