est-il possible de passer un nombre arbitraire d'arguments par défaut nommés à une fonction python conditionnellement?
pour par exemple. Il y a une fonction: p> logique est que j'ai une condition qui détermine si Arg3 doit être passée, je peux le faire comme ceci: P> func('arg', 'arg2', 'some value' if condition == True else # nothing so default gets picked
)
4 Réponses :
La seule façon dont je peux penser serait ou p> mais s'il vous plaît ne faites pas cela. Utilisez le code que vous avez fourni vous-même, ou quelque chose comme ceci: p>
Qu'est-ce que tu as contre ** et *?
Rien contre * code> et ** code>. Je pense juste que le code d'origine est plus lisible. Je pense que je n'aime pas a si C STRY B code>.
En variante, une logique conditionnelle pourrait être utilisée (en dehors de l'appel de la fonction) pour construire un dictionnaire d'arguments. Ils pourraient ensuite être passés avec ** code>. Cela reste lisible avec un plus grand nombre d'arguments.
Ce ne serait pas valide Syntaxe Python, vous devez avoir quelque chose après et la définition de fonction est modifié en conséquence: p> sinon code>. Ce qui est fait normalement est:
Si vous avez une fonction qui a beaucoup d'arguments par défaut et que vous souhaitez transmettre des valeurs différentes à certaines d'entre elles, en fonction de quelque chose d'autre sur votre programme, un simple WAY est d'utiliser Ceci a la prestation Ne pas obstruer votre code au point d'appeler votre fonction, s'il y a beaucoup de logique déterminant ce qui entre dans votre appel. Vous devrez faire attention si vous avez des arguments qui n'ont pas de valeur par défaut, d'inclure les valeurs que vous passez pour ceux qui ont précédé de passer votre dictionnaire. P> P> ** code> pour décompresser un dictionnaire des noms d'arguments et des valeurs que vous avez construites sur la base de votre logique de programme. p>
Vous pouvez écrire une fonction d'assistance Utilisez cette fonction pour appeler une autre fonction et utiliser caller.dont_pass code> pour spécifier des arguments que vous ne voulez pas passer . P> caller(func, 'arg', 'arg2', arg3 = 'some value' if condition else caller.DONT_PASS)