Je lis les codes source de mercurial et j'ai trouvé une telle Func def dans Commands.py :
def import_(ui, repo, patch1=None, *patches, **opts): ...
4 Réponses :
Parce que le passage de la clé d'un argument de mots clés peut être facultatif si la position de celle-ci est sans ambiguïté. Observez:
>>> def f(ui, p1=None, p2=None, *patches, **opts): ... print p1, p2 ... >>> f(1, 'a', 'b', 3) #p2 is a positional argument with default value? a b >>> f(1, p2='b') #p2 is a keyword argument? None b
Oui ... à mon avis, c'est une ambiguïté du temps d'exécution, pas une ambiguïté de définition du temps. Comme l'OP est concerné par la définition de la fonction Je décrivais la définition de la fonction . Mais je reconnais, c'est un bon point à noter.
Vous dérouissez probablement la définition de la fonction et la syntaxe d'appel de fonction un bit.
Veuillez consulter cette section sur les didacticiels officiels: P>
Permettez-moi de résumer les points principaux en utilisant cette fonction comme exemple: P> Patch1 code> n'est pas un mot-clé arg, c'est un positionnement argument avec une valeur d'argumentation par défaut. P>
* Les correctifs code> sont une liste d'arguments et non un argument de position. P>
# demonstrate how some additional positional and keyword arguments are passed
f1(1, 2, 3, 4, 5, 6, 7, a4=8, a5=9, a6=10)
# prints:
# 1 2 3 (4, 5, 6, 7) {'a5': 9, 'a4': 8, 'a6': 10}
Je trouve cette définition légèrement ambiguë (bien que pas incorrecte). Voir les modifications dans ma réponse pourquoi.
Voir mon exemple, vous pouvez utiliser Patch1 comme argument de mots clés à condition qu'il n'y ait aucun argument de position après cela.
Jetez un coup d'œil sur le PEP 3102 aussi il semble que son en quelque sorte liée à Ce .
résumer, patchs et opts Existe-t-il d'accepter des arguments variables, mais le plus tard est d'accepter des arguments de mots clés. Les arguments de mots-clés sont transmis comme un dictionnaire où, comme le Les arguments de position variable seraient enveloppé comme des tuples . p>
de votre exemple p> n'importe quel paramètre de position après Une autre chose importante est que, l'onus réside avec l'appelant pour s'assurer que la condition quelque chose qui enfreint cela augmenterait une erreur de syntaxe .. p> par exemple p> appels comme p> sont valides, mais P> u1, repo et patch1 code> être enveloppé comme des tuples dans des patchs. Tous les arguments de mots clés suivant les arguments de position variable seraient enveloppés comme des objets de dictionnaires via OPTS. p>
non-key argolaire ARC après l'argulaire code> n'est pas violé. P>
u1 = 1, repo = 2, patch1 = 3 , patches=(), and opts={"test":"test"}
you can use patch1 as a keywords argument but doing so you cannot wrap any variable positional arguments within patches
Merci pour vos exemples et vos références, je pense avoir ma réponse. Les arguments de Python sont tellement flexibles, je ne le savais pas assez bien avant cette question.
Je crois quand Ceci utiliserait un argument "mot-clé", mais quand défini strong> a Interface de la fonction avec: p> Vous définissez une "valeur par défaut". () p> afin de répondre à votre question; Avoir une valeur par défaut après qu'un argument de position est parfaitement normal, vous appelez donc une fonction avec un argument de mots clés avant un mot clé. p> Notez également, lorsque vous appelez une fonction, vous
Avez-vous déjà résolu cela? Si vous avez, ce serait bien si vous sélectionnez la réponse qui vous a fait résoudre le problème comme "accepté" et upvote tous les utiles (si vous ne l'avez pas fait déjà!). :)
Désolé, j'ai été très occupé tous ces jours-ci. Je vais maintenant lire vos réponses et sélectionnez une. Merci pour vous tous:)