2016-10-08 11 views

答えて

1

私は特定の何scipyのダウンロードを認識してないんだけど、どのように簡単な閉鎖について:

from scipy import optimize 

def testfun_factory(): 
    params = {} 
    def testfun(x, B): 
     params['B'] = x + 7 
     return params['B']**2 + 9/18 - x 
    return params, testfun 

params, testfun = testfun_factory() 
y = optimize.root(testfun, 7, 1) 
print(params['B']) 

また、__call__を持つクラスのインスタンスも呼び出し可能として渡すことができます。

+0

@ wrwrwr完璧な、これはトリックでした。私は好奇心が強いです、このようなクロージャーを変数や変数のリストと共に使用して、名前を保持する方法はありますか?この場合、Bはparams ['B']ではなく更新されます。 – DivideByZero

+0

技術的には、[this](http://stackoverflow.com/questions/31675756/temporarily-unpack-dictionary#answer-31675967)を辞書を '__exit__'で更新してください。簡潔にするために、 'params ['B']'の代わりに 'B'を使い、内部リターンの前に辞書を更新してください。 'dict'の代わりに名前空間(' class Params:pass')または '' namedtuple'(https://docs.python.org/3/library/collections.html#collections.namedtuple)を使うこともできます'params.B'への表記を短縮します。 – wrwrwr

関連する問題