0

(これ以上のタイトルが思いつきません!)

私は一連の機能を持っています:

def foo(bar, baz)
def spam(blah, etc, woof)

関数名と関数固有のパラメーターを含むNamespaceオブジェクトargs=(fun=foo, baz=111, baz=222)。関数を呼び出してパラメーターを渡すにはどうすればよいですか? このように、しかしより良い:

 x = vars(args)
 fun = x['fun']
 del x['fun']
 fun(**x)

(私は素敵な一行の解決策を探しています)。

4

4 に答える 4

2

aDictキーの下に関数名と他の引数を持つ辞書がある場合は、"fun"次を試すことができます。

aDict.pop("fun")(**aDict)

于 2012-05-03T09:02:08.660 に答える
1

欲しいx['fun'](**x)ですか?

関数が引数を取る限り、これは機能し**kwargsます。そうでない場合は、名前空間から必要なエントリをスライスするために何かを行う必要があります。

于 2012-05-03T09:15:40.427 に答える
0

私はあなたに解決策を提供しませんが、ここにヒントがあります:

>>> import inspect
>>> def g(a, b, c=3):
pass

>>> inspect.getargs(g.func_code)
Arguments(args=['a', 'b', 'c'], varargs=None, keywords=None)

これで、引数とその順序がわかり、名前空間オブジェクトを効果的に使用できるようになりました。注:これはC-Pythonでのみ可能です!

関数を呼び出すには、次を使用します。

>>> arguments = (1, 2, 3)
>>> keywords = {}
>>> g(*arguments, **keywords)

良い1日を!

于 2012-05-03T09:07:47.027 に答える
0

あなたが何を求めているのかわかりませんが、これは同様の結果をもたらすはずです:

def callback(fun, *args, **kwargs):
    return fun(*args, **kwargs)

そして、次のように呼び出すことができます:

callback(some_func, 'a', 'b', c=10, d=123)

これにより、次が呼び出されます。

some_func('a', 'b', c=10, d=123)
于 2012-05-03T08:58:07.577 に答える