J'ai un point de terminaison avec certains paramètres requis et facultatifs:
Requis: ID [STR] P>
Facultatif: nom_1 [str], regex [booléen], ignore_case [booléen] p>
Je veux créer une fonction pour utiliser ce point d'extrémité: p> est-ce un meilleur moyen de le faire en évitant tous ces éléments si
s? p> p>
3 Réponses :
import requests def get_function(ID, **kwargs): url= 'heretheurl/{ID}'.format(ID) response = requests.get(url, params=kwargs)
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 code>? (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
Je suppose que vous pourriez dire:
for local, value in locals().items(): if value is not None: params[local] = value
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)