我需要编写一个包含3个参数的方法:
string
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)
我需要这样称呼:
^{pr2}$我可以这样做:
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
的东西,但我不太明白。在
我就用
与
^{pr2}$允许您更自然、更透明地传递}:
args
和{当然,您可以使用}来代替dict,但是您可能需要注意每个名称空间中的哪些函数要公开给调用者
globals()
或{事实上,
getattr
会让你到达那里。在就像}与类无关的函数和变量。在
getattr
以相同的方式处理方法和字段一样,您可以处理 通过引用locals()
或{如果要引用全局范围内的函数:
^{pr2}$例如:
请记住,在Python中,始终可以使用
**
传递参数列表或关键字参数dict:如果您确实喜欢将参数作为list/dict传递给
dispatch
:相关问题 更多 >
编程相关推荐