Y a-t-il une bonne règle de base lorsque vous préférez que vous préférez les signatures de fonction varargs dans votre API sur la transmission d'une ierérable à une fonction? ("Varargs" étant court pour "variadique" ou "nombre variable-nombre-d'arguments"; c'est-à-dire par exemple, alors que tandis que * args code>)
os.path.join code> a une signature vararg: p>
min code> permet: p>
Tout code> /
Tout code> permet seulement à une ierérable: p>
4 Réponses :
Ma règle de base est de l'utiliser lorsque vous pourriez souvent basculer entre le passage d'un et plusieurs paramètres. Au lieu d'avoir deux fonctions (un code d'interface graphique par exemple): ou même pire, ayant une seule fonction p> et l'utiliser Comme activer_tabls (['ongled1']) code>, j'ai tendance à utiliser Just:
défaire enable_tabs (* onglets) code>. Bien que, voir quelque chose comme
activer_tabs ('tab1') code> a l'impression de mal (à cause du pluriel), je le préfère sur les alternatives. P> p>
Vous devez l'utiliser lorsque votre liste de paramètres est variable. P>
Ouais, je sais que la réponse est un peu Daft, mais c'est vrai. Peut-être que votre question était un peu diffuse. : -) p>
Les arguments par défaut, comme min () ci-dessus sont plus utiles lorsque vous souhaitez que vous souhaitiez des comportements différents (comme min () ci-dessus) ou lorsque vous ne souhaitez tout simplement pas forcer l'appelant à envoyer dans tous les paramètres. P>
Le * arg est pour quand vous avez une liste variable d'arguments du même type. L'assemblage est un exemple typique. Vous pouvez le remplacer par un argument qui prend une liste aussi. P>
** KW est pour quand vous avez de nombreux arguments de différents types, où chaque argument est également connecté à un nom. Un exemple typique est que lorsque vous souhaitez une fonction générique pour la manipulation de la soumission de formulaire ou similaire. P>
Considérez à l'aide de Varargs lorsque vous vous attendez à spécifier que vos utilisateurs spécifient la liste des arguments en tant que code de l'APPETIQUES ou que la seule valeur est la casse commune. Lorsque vous vous attendez à ce que vos utilisateurs reçoivent les arguments d'ailleurs, n'utilisez pas Varargs. En cas de doute, err sur le côté de ne pas utiliser de varargs. P>
Utilisation de vos exemples, l'usecase la plus courante pour os.path.join em> est d'avoir un préfixe de chemin et d'ajouter un nom de fichier / chemin relatif à ce sujet, de sorte que l'appel ressemble généralement à os .Path.join (préfixe, quelque_file) em>. D'autre part, tout () em> est généralement utilisé pour traiter une liste de données, lorsque vous connaissez tous les éléments que vous n'utilisez pas aucun ([A, B, C]) < / em>, vous utilisez a ou b ou c em>. p>
Prédire si l'appelant aura les valeurs dans le contexte local (dans le cas général) est plus difficile qu'il n'y paraît! (J'ai également pensé que vous devriez vous tromper sur le côté d'un ierérable.)
Ce sont des interfaces complètement différentes.
Dans un cas, vous avez un paramètre, dans l'autre que vous en avez beaucoup.
any(1, 2, 3) TypeError: any() takes exactly one argument (3 given) os.path.join("1", "2", "3") '1\\2\\3'