如何将参数传递给通过字典查找调用的这些函数

时间:2013-08-01 15:47:18

标签: python

我需要能够获得传递给我的函数make_choice的所有参数。但是在第25行(requesterverb)我收到了运行时错误:

requester[verb](kwargs)
TypeError: doPUT() takes exactly 0 arguments (1 given)

我做错了什么?

这是我的代码:

#switch using dictionary
def make_choice(verb, **kwargs):
    def doGET(**kwargs):
        print "Doing GET"
        for key in kwargs:
            print "another keyword arg: %s: %s" % (key, kwargs[key])

    def doPUT(**kwargs):
        print "Doing PUT"
        for key in kwargs:
            print "another keyword arg: %s: %s" % (key, kwargs[key])

    def doDELETE(**kwargs):
        print "Doing DELETE"  

    def doPOST(**kwargs):
        print "Doing POST"

    def doPATCH(**kwargs):
        print "Doing PATCH"  

    requester = { 'GET': doGET, 'PUT': doPUT }

    requester[verb](kwargs)


make_choice(verb='PUT',param1='param1',param2='param2',param3='param3')
print "done"

2 个答案:

答案 0 :(得分:3)

您在**之前忘记了kwargs

requester[verb](**kwargs)

答案 1 :(得分:1)

make_choice范围内,kwargs是一个包含paramX vaules和密钥的字典。 所以在这个函数范围内,kwargs只不过是一本字典。

只需移除**功能参数中kwargs之前的doXXX即可。