J’ai récemment remarqué quelque chose d’intéressant en regardant Python 3.3, Le bloc optionnel « flèche » était absent dans Python 2 et je n’ai pas pu trouver aucune information sur sa signification dans Python 3. Il s’avère que c’est correct et qu’il est accepté par l’interpréteur :
def f(n) -> 100:
return n
J’ai pensé qu’il pouvait s’agir d’une sorte de syntaxe de précondition, mais… :
Je ne peux pas tester x ici, car il est toujours indéfini,
Peu importe ce que je mets après la flèche (par exemple 2 < 1), cela n’affecte pas le comportement de la fonction.
Quelqu’un qui connaît ce style de syntaxe pourrait-il l’expliquer ?
le -> int indique simplement que f() renvoie un entier (mais il ne force pas la fonction à renvoyer un entier). Il s’agit d’une annotation de retour et est accessible en tant que f.__annotations__['return'].
Python prend également en charge les annotations de paramètres :
def f(n: float) -> int:
return int(n)
: float indique que n doit être un float. Il est accessible en tant que f.__annotations__['n'].
Le symbole -> est utilisé dans les annotations de fonction. Dans les versions plus récentes de Python >= 3.5, il indique la définition de fonction.
Dans Python 3.5 cependant, PEP 484 – Type Hints attache une seule signification à ceci : -> est utilisé pour indiquer le type renvoyé par la fonction. Il semble également que cela sera appliqué dans les futures versions.
Cela n’a pas été implémenté depuis la 3.6 à ma connaissance, donc il est possible que cela soit reporté dans les versions futures.
En fonction de cela, l’exemple que vous avez fourni :
def f(n) -> 100:
return n
sera interdit plus tard (et dans les versions actuelles, il sera une source de confusion), il faudrait le remplacer par :
def f(n) -> int:
return n
pour qu’il décrive effectivement que la fonction f renvoie un objet de type int.