Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将if-elseif语句转换为字典_Python_Design Patterns_Dictionary_Switch Statement - Fatal编程技术网

Python 将if-elseif语句转换为字典

Python 将if-elseif语句转换为字典,python,design-patterns,dictionary,switch-statement,Python,Design Patterns,Dictionary,Switch Statement,我有以下代码用于对服务器进行RESTful调用: def request(self, request, account_id, user): if request is 'get_id': #Get user from id result = requests.get(api_root + "/accounts/" + account_id + "/users/" + user, headers=self.headers) elif reque

我有以下代码用于对服务器进行RESTful调用:

def request(self, request, account_id, user):

    if request is 'get_id':
        #Get user from id
        result = requests.get(api_root + "/accounts/" + account_id + "/users/" + user, headers=self.headers)

    elif request is 'get_username':
        #Get user from username
        result = requests.get(api_root + "/accounts/" + account_id + "/users?username=" + user, headers=self.headers)

    elif request is 'get_email':
        #Get user from username
        result = requests.get(api_root + "/accounts/" + account_id + "/users?email=" + user, headers=self.headers)

    elif request is 'post':
        #Add user to new account
        result = requests.post(api_root + '/accounts/' + account_id + '/users', data=json.dumps(user), headers=self.headers)

    elif request is 'delete':
        #Delete user from account
        result = requests.delete(api_root + "/accounts/" + account_id + "/users/" + user, headers=self.headers)

    #Throw exception if non-200 response
    result.raise_for_status()

    #Print request result / status
    print "\nRequest " + request + " Result: " + result.text + "\nStatus: " + str(result.status_code)

    return result
我知道这很难看,我想把它改成字典,比如:

def request(self, request, account_id, user):
    url = api_root + "/accounts/" + account_id

    function_dictionary = {}
    function_dictionary['get_id']       = requests.get(url + "/users/" + user, headers=self.headers)
    function_dictionary['get_username'] = requests.get(api_root + "/accounts/" + account_id + "/users?username=" + user, headers=self.headers)
    function_dictionary['get_email']    = requests.get(api_root + "/accounts/" + account_id + "/users?email=" + user, headers=self.headers)
    function_dictionary['delete']       = requests.delete(url + "/users/" + user, headers=self.headers)
    function_dictionary['post']         = requests.post(url + '/users', data=json.dumps(user), headers=self.headers)  

    result = function_dictionary.get(request)

    #Throw exception if non-200 response
    result.raise_for_status()
    return result
我仍然觉得我走错了方向。有人能告诉我Python中处理if/elseif语句的正确方法是什么吗


谢谢

使用
dict
替换
if:elif:
循环肯定是Pythonic,但请注意,在您的示例中,您正在调用
请求。对于存储在字典中的每个案例,获取
等,即字典值是这些调用的结果

另一种方法是在字典中分别存储函数和参数:

function_dict = {'get_id': (requests.get, # function
                            (url + "/users/" + user,), # tuple of arguments  
                            {'headers': self.headers}), # dict of keyword args
                 ...}
现在你可以使用

func, args, kwargs = function_dict[request]
result = func(*args, **kwargs)
另外,请注意,使用
is
比较字符串是一个坏主意(尽管是这样);最好使用
==

if request == 'get_id':

检查这里的元组:headers=self.headers。。。无效语法哇这很酷,只是几件事,
函数dict(request)
应该是
函数dict[request]
对吗?对于我的
post
请求,我应该如何包含
data=json.dumps(user)
?我遇到语法错误,将更新我的问题。与其单独存储函数和参数,不如使用
lambda
。这就是他们的目的@Tomcelic是的,应该是
[]
;固定的
json.dumps
是一个关键字参数,
data
,因此应该在带有
标题的字典中。