803 votes

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

J'ai récemment remarqué quelque chose d'intéressant en regardant Spécification de la grammaire Python 3.3 :

funcdef: 'def' NAME parameters ['->' test] ':' suite

Le bloc optionnel "flèche" était absent de Python 2 et je n'ai pu trouver aucune information concernant sa signification dans Python 3. Il s'avère que c'est un Python correct et qu'il est accepté par l'interpréteur :

def f(x) -> 123:
    return x

J'ai pensé que ça pouvait être une sorte de syntaxe de précondition, mais.. :

  • Je ne peux pas tester x ici, car il n'est pas encore défini,
  • Peu importe ce que je mets après la flèche (par ex. 2 < 1 ), cela n'affecte pas le comportement de la fonction.

Quelqu'un qui a l'habitude de ce style de syntaxe pourrait-il l'expliquer ?

9voto

maz Points 61
def f(x) -> 123:
    return x

Mon résumé :

  1. Tout simplement -> est introduit pour permettre aux développeurs de spécifier facultativement le type de retour de la fonction. Voir Proposition d'amélioration de Python 3107

  2. C'est une indication de la façon dont les choses pourraient évoluer à l'avenir, au fur et à mesure que Python est adopté à grande échelle - une indication vers un typage fort - c'est mon observation personnelle.

  3. Vous pouvez également spécifier des types d'arguments. La spécification du type de retour des fonctions et des arguments aidera à réduire les erreurs logiques et à améliorer le code.

  4. Vous pouvez avoir des expressions comme type de retour (à la fois au niveau des fonctions et des paramètres) et le résultat des expressions peut être accédé via annotations l'attribut "return" de l'objet. annotations sera vide pour l'expression/la valeur de retour pour les fonctions en ligne lambda.

8voto

Mike D3ViD Tyson Points 154

def function(arg)->123:

C'est simplement un type de retour, entier dans ce cas, le nombre que vous écrivez n'a pas d'importance.

comme Java :

public int function(int args){...}

Mais pour Python (comment Jim Fasarakis Hilliard dit) le type de retour c'est juste un indice Il s'agit donc de suggérer le retour mais de permettre de retourner d'autres types de données comme une chaîne de caractères.

6voto

vignesh Points 31

-> est introduit dans python3.

En d'autres termes, le contenu après le -> indique le type de retour de la fonction. Le type de retour est facultatif.

2 votes

En quoi les conseils donnés dans cette réponse diffèrent-ils de ceux donnés dans les réponses précédentes déjà publiées ?

0 votes

Le type de retour peut encore être différent, l'annotation est comme une expression qui explique la valeur de retour de la fonction, mais si par exemple nous mettons str après '->' mais que nous retournons un int, python ne donnera pas d'erreur.

5voto

everyt4u Points 49
def f(x) -> str:
return x+4

print(f(45))

Donne le résultat : 49 .

En d'autres termes, '-> str' n'a AUCUN effet sur le type de retour :

print(f(45).__class__)

<class 'int'>

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