80 votes

Paramètre de fonction avec deux points

Je viens de tomber sur cette fonction :

def splitComma(line: str):
    splits = Utils.COMMA_DELIMITER.split(line)
    return "{}, {}".format(splits[1], splits[2])

Je sais qu'il est possible de séparer les paramètres par des , ou de définir une valeur dans un paramètre, par exemple a=39 mais je n'ai pas vu un colon comme line:str . J'ai vérifié la définition de la fonction en ligne mais je n'ai rien trouvé de tel. Que signifient ces deux points ?

2 votes

Remarque : le duplicata traite des annotations de variables, qui sont nouvelles dans Python 3.6. Il s'agit ici d'une annotation de fonction ordinaire, qui a été introduite dans Python 3.0.

99voto

chepner Points 54078

Il s'agit d'une annotation de fonction ; les arguments de la fonction et la valeur de retour peuvent être marqués avec des expressions Python arbitraires. Python lui-même ignore l'annotation (sauf pour la sauvegarder), mais des outils tiers peuvent en faire usage.

Dans ce cas, il s'agit d'un indice de type : des programmes tels que mypy peut analyser votre code de manière statique (c'est-à-dire sans l'exécuter, mais en regardant uniquement le code source lui-même) afin de s'assurer que seuls les éléments suivants sont pris en considération str sont transmises en tant qu'arguments à splitComma .

Une annotation plus complète pour spécifier également le type de retour de la fonction :

def splitComma(line: str) -> str:
    ...

(Notez qu'à l'origine, les annotations de fonction n'étaient pas supposées avoir une sémantique spécifique. C'est toujours le cas, mais la grande majorité des annotations de hypothèse ces jours-ci est que les annotations fournissent des indices de type).

9voto

wbadart Points 1955

Il s'agit d'un annotation de type utilisé par les outils d'analyse statique pour vérifier, eh bien, les types. Il permet de s'assurer que le programme est correct avant d'exécuter le code.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X