と発送方法は、私は3つの引数に取るメソッドを記述する必要があります。string
のpython:文字列入力
- をその関数の引数の
list
注文機能 - の名前で。これがデフォルト値と
*varargs
と引数を含むが、任意の追加のキーワード引数を表す**kwargs
dict
が含まれていない、またはNone
どれ
がない場合、私は、関数とコールを取得するために、この入力を使用する必要がありますそれ。たとえば、次のように
def dispatch(name, args, kwargs=None):
do_magic_here(name, args, kwargs)
def meth1():
print "meth1"
def meth2(a, b):
print "meth2: %s %s" % (a, b)
def meth3(a, **kwargs):
print "meth3: " + a
for k,v in kwargs.iteritems():
print "%s: %s" % (k,v)
そして、私はこのようなものを呼び出すことができるようにする必要があります。
>>> dispatch("meth1", [])
meth1
>>> dispatch("meth2", [1, 3])
meth2: 1 3
>>> dispatch("meth3", [1], {"hello":2, "there":3})
meth3: 1
hello: 2
there: 3
私はこれを行うことができます:
def do_magic_here(name, args, kwargs=None):
if name=="meth1":
meth1()
if name=="meth2":
meth2(args[0], args[1])
if name=="meth3":
meth3(args[0], **kwargs)
しかし、私は40のように派遣しようとしているがメソッドが増え、その数が増える可能性があるので、もっとプログラム的なやり方があると思っています。私はgetattr
と何かを見ているが、私はそれを理解できない。
'dispatch'は' * args'や '** kwargs'を取るのではなく、実際のリストと辞書を使用しています。違いがありますか?私が働いているフレームワークのために、この方法で定義する必要があります – ewok
本当にリストとディクテーションを通らなければならない限り、私はこのようにします。未知の引数をPythonで渡すより自然な方法です(デコレータ、メソッドのオーバーライドなど) – DaveBensonPhillips
@ewok '*'でリストを解凍しても、 '**'でディクテーションすることができます。もしあなたが 'dispatch(* args、** kwargs)'を使うことができるならば、 – schwobaseggl