12
votes

Passer conditionnellement le nombre arbitraire de défaut nommé argument à une fonction

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> xxx pré>

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
)


0 commentaires

4 Réponses :


8
votes

La seule façon dont je peux penser serait xxx

ou xxx

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: xxx


3 commentaires

Qu'est-ce que tu as contre ** et *?


Rien contre * et ** . Je pense juste que le code d'origine est plus lisible. Je pense que je n'aime pas a si C STRY B .


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 ** . Cela reste lisible avec un plus grand nombre d'arguments.



9
votes

Ce ne serait pas valide Syntaxe Python, vous devez avoir quelque chose après sinon . Ce qui est fait normalement est: xxx

et la définition de fonction est modifié en conséquence: xxx


0 commentaires

2
votes

Si vous avez une fonction qui a beaucoup d'arguments par défaut xxx

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 ** pour décompresser un dictionnaire des noms d'arguments et des valeurs que vous avez construites sur la base de votre logique de programme. xxx

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.


0 commentaires

0
votes

Vous pouvez écrire une fonction d'assistance xxx pré>

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)


0 commentaires