我想知道是否可以在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()
我真的不想这样做,因为这意味着要创造更多的功能
答案 0 :(得分: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)
这是有效的,因为你正在改变列表对象(通过分配一个完整的切片)而不是重新绑定它(一个裸=
)。
答案 1 :(得分: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)