Solution Pythonic pour le passage d'arguments conditionnels
J'ai une fonction à deux paramètres optionnels:
def func(a=0, b=10):
return a+b
Quelque part dans mon code je fais un certain conditionnelle passant comme argument:
if a and b:
return func(a, b)
elif a:
return func(a)
elif b:
return func(b=b)
else:
return func()
Est-il de toute façon à simplifier le code dans ce schéma?
MODIFIER:
Supposons que je suis pas autorisés à en œuvre de paramètre par défaut de la logique à l'intérieur de func
.
Je peut avoir plusieurs fonctions comme func
: func1
func2
et func3
serait contiennent tous les
a = a or 0
b = b or 10
consolidés.
Mais je suis de l'appel de ces séries de fonctions pour éviter les doublons. (à l'aide d'un décorateur)
source d'informationauteur satoru
Vous devez vous connecter pour publier un commentaire.
Si vous ne voulez pas changer quoi que ce soit dans
func
alors la meilleure option serait de passer un dict des arguments de la fonction:ou tout simplement:
Pourquoi ne pas passer cette logique à la fonction?
pour résoudre vos question que je voudrais faire:
Mais le plus pythonic façon serait d'Aucun utiliser comme valeur par défaut dans votre fonction:
et il suffit d'appeler
f(a, b)
En passant par le désormais supprimé les commentaires à la question que le chèque est censé être pour les variables
None
plutôt que d'être falsey, changementfunc
pour qu'elle traite les argumentsNone
:Et puis il suffit d'appeler
func(a, b)
à chaque fois.Par défaut, toutes les méthodes en Python prendre la variable d'arguments.
Lorsque vous définissez un argument dans la signature de la méthode, vous explicitement le rendre nécessaire. Dans votre extrait de code, ce que tu fais, c'est donner une valeur par défaut - pas de faire facultatif.
De considérer les éléments suivants:
Dans cet extrait, les deux
a
etb
sont nécessairepuisque je n'ai pas de définir les valeurs par défaut. Ils ne sont pas facultatif.Cependant dans votre extrait de code, parce que vous avez donné les valeurs par défaut dans la signature de la méthode qu'ils ressembler ils sont facultatifs, mais en fait ils ont juste les valeurs par défaut attribuées.
Vous pouvez le confirmer en vérifiant la liste des arguments à l'intérieur du corps de la méthode:
Une façon d'avoir votre fonction à l'accepter tout nombre d'arguments (en d'autres termes, ce qui les rend tous facultatif):
Vous pouvez ajouter un décorateur d'éliminer
None
arguments:Cela peut fonctionner:
Pour répondre à votre question littérale:
Edit:
Voir le commentaire pourquoi ceci ne répond pas à la question.