2016-07-07 8 views
2

設定のデフォルト値

lambdify(variables, expression) 

ので

lambdify((Symbol('x'), Symbol('y')) , 'x**2 + y') 

lambda x, y: x**2 + y 
を生成します

しかし、どのように私はいくつかのデフォルト値を与える変数の?何かを得るには

lambda x, y=0: x**2 + y 

私はこれをlambdify(('x', 'y=0') , 'x**2 + y')のような文字列で行うことができますが、他のsympy式からそれらを抽出しているので、sympyシンボルオブジェクトで作業する必要があります。

答えて

0

文字列で動作するという事実は事故です。 lambdifyの動作の仕方は、式の文字列形式を作成した後、文字列"lambda %s: (%s)" % (', '.join(map(str, args)), expr)を返すことです(実際にはそれよりも少し複雑ですが、基本的な考え方です)。したがって、argsが('x', 'y=0')の場合、その結果はlambda x, y=0: ...として挿入されます。

は今lambdifyはあなたの最良の選択肢であるので、パラメータのキーワード引数を作成するオプションがありません。

  • は、文字列を(すでに作品を発見するもの)を使用して、手動でキーワード引数を作成し、または

  • あなたは、一般的なケースでそれを行うには

    lambda x, y=0: lambdify((x, y), expr)(x, y) 
    

    のように、新しいラムダでlambdified機能をCAラップnは

    def create_wrapped(args, expr): 
        func = lambdify(args, expr) 
        @functools.wraps(func) 
        def wrapped(*_args, **kwargs): 
         # Write the logic here to parse _args and kwargs for the arguments as you want them 
         return func(*actual_args) 
        return wrapped 
    
+0

のように私はちょうどことを文字列に変換して使用すると思います、あなたが好きなロジックとキーワード引数のラッパーを作成し、いくつかの関数を書きます –

関連する問題