代码之家  ›  专栏  ›  技术社区  ›  bwrr

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

  •  0
  • bwrr  · 技术社区  · 6 年前

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

    下面是我尝试在函数2中使用函数1的结果的最小工作示例:

    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的结果,而不必重新定义所有的输入参数。

    4 回复  |  直到 6 年前
        1
  •  1
  •   Sheldore    6 年前

    input4 是一个作用域是本地的参数 function1 . 这同样适用于 input5 input6 . 您需要使用 self __init__ 以便使用 自己 自己 功能1

    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
  •  0
  •   okovko Sergey Kolesnik    6 年前

    self.input4 毫无意义,因为这不是你要去的领域 self __init__ .

    自我输入4 function2 __初始化__ function1 需要分配 self.input4 = # something

        3
  •  0
  •   John Anderson    6 年前

    只需在 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
  •  0
  •   pyj    6 年前

    “Scope”是一个花哨的术语,用来表示变量的可访问性,通常还表示变量的生存期。 input4 看不见里面 function2 因为它只是由名字来定义的 输入4 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))