0
votes

Les annotations de type Python appliquent-elles une vérification de type statique?

J'essaie d'appliquer un type statique en vérification de type statique dans un projet écrit en Python, en utilisant le module typing .

Quand je définis une fonction comme celui du DOC xxx

et essayez de faire quelque chose comme message d'accueil (3) , j'ai en effet eu l'erreur suivante xxx

mais quand je définis à nouveau une fonction appelée test < / p> xxx

et do test ("a") , j'ai a imprimé sans erreur soulevée. J'ai aussi essayé xxx

et do test (3) , mais aucun typeError n'est augmenté.

J'ai défini les deux fonctions dans Exactement le même environnement, c'est-à-dire une session d'interaction Python utilisant ITERM. Pourquoi cela arriverait-il?


2 commentaires

Le typeError soulevé par la salutation vient d'ajouter un entier à une chaîne, non dû à la typée


Mais alors qu'est-ce que le DOC signifie par "vérificateur de type statique" si les annotations de type n'appliquent pas le type de vérification du type?


3 Réponses :


1
votes

L'indice ici est dans le numéro de ligne: L'erreur se produit dans la fonction, lorsque vous essayez d'ajouter 'Hello' et 3 . Les annotations de type sont vérifiées pour la correction syntaxique par l'interprète, mais ne sont pas autrement utilisées.

Il existe des projets tels que mypy qui utilise les annotations pour la vérification du type d'état et divers autres fins.


0 commentaires

4
votes

type annotations de type en python ne pas strong> appliquer la vérification du type statique.

Python est toujours une langue dynamique, où l'interprète vérifie s'il a une méthode pour faire l'opération, ajoutez un STR ("Bonjour ") et ajoutez un entier (3), lorsqu'il atteint cette ligne pendant la boucle d'exécution. PEP-484 stipule le noyau -Développeurs ne veulent pas changer cela avec des annotations. P>

Si vous regardez la documentation, il s'appelle 'Type Inc. . Les astuces ne sont pas appliquées. P>

Les indices de type sont vraiment pour les développeurs et leurs outils (comme IDes) afin de mieux documenter le type attendu d'un paramètre. Mais l'ajout de cette forme de documentation ne place aucune restriction l'argument. C'est simplement une documentation forte>. En fait, Il est préférable de penser à ces annotations en tant que documentation em>. P>

L'erreur que vous voyez se produit sans ces annotations. E.g. P> xxx pré>

Il est possible de développer des outils pour le faire si vous le souhaitez. L'annotation sur l'objet p> xxx pré>

pourquoi est-ce comme ça? Strong> En Python, nous ne faisons généralement pas de vérifications de types explicites. Au lieu de cela, nous essayons simplement d'appeler la méthode, comme "Ajouter" Bonjour "et 3" et qu'il y ait une erreur. C'est à l'appelant de la fonction de fournir les types corrects. Mais cela signifie également que c'est à l'auteur de la fonction de documenter le paramètre avec précision. Type Intumations Aidez à décrire le type attendu et à le rendre disponible sur l'objet, ce qui est utile pour d'autres outils à accrocher. Auparavant, nous écririons ce genre de choses comme une documentation, comme: p> xxx pré>

Utilisez le dactylographie de canard pour vous aider à sortir forte> L'erreur de type que vous avez soulevée serait évitée si vous avez utilisé la mise en forme de chaîne intégrée ou lancer la valeur entrante sur une chaîne avant d'appeler Ajouter. Par exemple, pour éviter l'erreur que vous avez vue, vous pourriez: P>

 def greeting(name: str) -> str:
    """Greeting to name
    :param name: str, the name to greet
    Returns string"""
    return "hello" + str(name)

def greeting(name: str) -> str:
    """Greeting to name
    :param name: str, the name to greet
    Returns string"""
    return "hello {}".format(name)


0 commentaires

0
votes

Les annotations de type sont commentaires . Ils n'affectent aucune manière le fonctionnement de base de l'interprète Python. Python ne vérifie pas si les arguments que vous fournissez correspondent au type spécifié dans l'annotation type!


0 commentaires