如何通过将方法名称传递给函数参数来调用get或python请求库的任何方法?

时间:2019-05-27 10:23:44

标签: python-3.x python-requests

我正在使用python的请求库。我想调用请求方法GET,POST或任何方法,具体取决于函数调用中收到的参数。我将在该函数内调用请求方法。我该如何实现?

import requests

def get_endpoint(method,shop, list_obj):
    join_sentence = '/'.join(list_obj)
    endpoint_api = "https://{0}/admin/2019-04/{1}.json".format(shop, join_sentence)
    a = requests.method(endpoint_api) # this method should be replaced by method argument of a function get_endpoint
get_endpoint('get', "https://abc/", ['john','joe','1368797932'])

我希望它将用get,post替换方法,无论传递给函数的那个​​URL是哪个。 对于前。 requests.get(endpoint_api)#get被方法替换,它将调用url。

2 个答案:

答案 0 :(得分:0)

您可以使用字典,例如:

def get_endpoint(method,shop, list_obj):
    method_f = {
        "get": requests.get,
        "post": requests.post,
        ... 
    }
    def invalid_method(*_):
        raise ValueError("Method not supported")
    join_sentence = '/'.join(list_obj)
    endpoint_api = "https://{0}/admin/2019-04/{1}.json".format(shop, join_sentence)
    a = method_f.get(method, invalid_method)(endpoint_api) # this method should be replaced by method argument of a function get_endpoint

请注意,如果您不支持该方法,则我添加了一个默认函数来引发错误。该错误仅出于示例目的,您可以提出任何需要的内容。

答案 1 :(得分:0)

您可以使用python eval方法来调用带字符串的方法。虽然我不确定这是否是推荐的方法。

import requests

def get_endpoint(method,shop, list_obj):
    join_sentence = '/'.join(list_obj)
    endpoint_api = "https://{0}/admin/2019-04/{1}.json".format(shop, join_sentence)
    return eval('requests.' + method)(endpoint_api)

get_endpoint('get', "https://abc/", ['john','joe','1368797932'])