Que signifie -> dans les définitions de fonctions Python?

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 ?

Dans le code suivant :

def f(n) -> int:
    return int(n)

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.

Bonjour,

Pour comprendre les bases des Fonctions dans Python, je vous recommande de lire:

Bon courage :slightly_smiling_face: