0

我想知道是否可以在 python 中创建一个函数 foo 以便

def calulate (self, input):
    input = #some stuff

def foo2(self):
    self.calculate(self.var1)
    self.calculate(self.var2)

还是你必须这样做

def calculation(self):
    output=#some stuff
    return output
def foovar1(self):
    self.var1=self.calculation()
    self.var2=self.calculation()

我真的不想这样做,因为这意味着创建更多功能

4

2 回答 2

2

在 Python 中,您可以改变函数参数,但不能直接在调用者的范围内重新绑定它们。您可以传递实例成员名称:

def foo(self, inputname):
    setattr(self, inputname, #some stuff)

def foo2(self):
    self.foo('var1')
    self.foo('var2')

或者,如果self.var1是一个可变对象,例如您可以编写的列表:

def foo (self, input):
    input[:] = #some stuff

def foo2(self):
    self.foo(self.var1)
    self.foo(self.var2)

这是有效的,因为您正在改变列表对象(通过分配给完整切片)而不是重新绑定它(裸=)。

于 2012-09-19T13:49:02.190 回答
0

另一种解决方案可能是拥有一个特制的容器。

class Container(object):
    def __init__(self, value=None):
        self.value = value

然后在另一个类中使用它:

def foo(self, container):
    container.value = ...

def foo2(self):
    self.foo(self.var1)
    self.foo(self.var2)
于 2012-09-19T15:05:16.167 回答