0
votes

Meilleure façon de sauvegarder les paramètres de la fonction pour une URL donnée

J'ai un point de terminaison avec certains paramètres requis et facultatifs:

Requis: ID [STR]

Facultatif: nom_1 [str], regex [booléen], ignore_case [booléen]

Je veux créer une fonction pour utiliser ce point d'extrémité: xxx

est-ce un meilleur moyen de le faire en évitant tous ces éléments si s?


0 commentaires

3 Réponses :


0
votes
import requests

def get_function(ID, **kwargs):
    url= 'heretheurl/{ID}'.format(ID)
    response = requests.get(url, params=kwargs)

3 commentaires

Merci, mais comment puis-je vérifier si les clés sont correctes sans utiliser à nouveau tous les ifs?


@LAURA Que voulez-vous dire par "correct"? Voulez-vous seulement passer certains paramètres nommés? Ou seulement les valeurs transmettantes qui ne sont pas Aucun ? (Les demandes ignoreront qui ne sont pas)


Je veux dire, si je déclare les paramètres de la fonction, si j'appelle cette fonction avec d'autres paramètres, cela me retournera une erreur. Mais si j'utilise * kwargs, je pourrais envoyer quelque chose sans obtenir une erreur, par exemple get_function (id = 2, 'chien' = 'Tom') mais "chien" ne fait pas partie de mon point final



0
votes

Je suppose que vous pourriez dire:

for local, value in locals().items():
    if value is not None:
        params[local] = value


0 commentaires

1
votes

Vous pouvez utiliser ** kwargs code> pour la commodité d'avoir les paramètres dans un dictionnaire plutôt que par un tas de variables locales qui sont alors plus difficiles à gérer, mais appliquent ensuite que seuls certains arguments clés sont Acceptable, et pour autre chose, soulevez un typeError code>. (Vous pouvez plutôt avoir une liste d'arguments explicite, puis utiliser locaux () code>, mais il inclura d'autres variables locales, elle pourrait donc être désordonnée.)

import requests

def get_function(ID, **kwargs):

    supported_args = {'name_1', 'regex', 'ignore_case'}
    for key in kwargs:
        if key not in supported_args:
            raise TypeError(f"{key} not supported")

    url = 'heretheurl/{ID}'.format(ID=ID)

    params = dict((k, v) for k, v in kwargs.items() if v is not None)
    
    response = requests.get(url, params=params)


get_function("blah", name_1="stuff", ignore_case=True)


0 commentaires