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 に答える