À partir de Python 3.10, le formulaire retourné par inspect.signature () semble être basé sur typing.get_type_hints ().

Comme je l'ai remarqué aujourd'hui, le module d'inspection de Python 3.10 utilise maintenant typing.get_type_hints () pour interpréter les types. Le commit correspondant est iciest.

Cela semble être un correctif lié à l'évaluation retardée des annotations activées par défaut à partir de Python 3.10. Puisque les informations d'annotation de type contenues dans ʻobj .__ annotations__deviennent une chaîne de caractères, on peut juger qu'il est approprié de la laisser àtyping.get_type_hints (). Avec ce changement, les informations de type de ʻinspect.signature () , qui se référaient simplement à ʻobj .__ annotations__`, seront commutées vers le résultat de l'analyse qui va encore plus loin.

Par exemple, dans Python 3.9, l'argument de fonction hello () suivant name est traité comme un type str.

$ python3.9
Python 3.9.0 (default, Oct 24 2020, 15:41:29)
[Clang 11.0.3 (clang-1103.0.32.59)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> def hello(name: str = None):
...     print("Hello ", name)
...
>>> import inspect
>>> inspect.signature(hello)
<Signature (name: str = None)>

Par contre, en Python 3.10 (en cours de développement), il est considéré comme étant de type ʻOptional [str] `. Voyant que l'argument par défaut est «Aucun», il renvoie un meilleur type.

$ python3.10
Python 3.10.0a1+ (heads/master:805ef73, Oct 24 2020, 15:07:19)
[Clang 11.0.3 (clang-1103.0.32.59)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> def hello(name: str = None):
...     print("Hello ", name)
...
>>> import inspect
>>> inspect.signature(hello)
<Signature (name: Optional[str] = None)>

D'ailleurs, si le nom ne peut pas être résolu à l'exécution (par exemple, si typing.TYPE_CHECKING n'est pas importé à l'exécution), ʻobj .__ signature__` est toujours référencé, donc le résultat de l'interprétation peut changer en fonction de l'annotation.

$ python3.10
Python 3.10.0a1+ (heads/master:805ef73, Oct 24 2020, 15:07:19)
[Clang 11.0.3 (clang-1103.0.32.59)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> def hello(name: Unknown, age: int = None): pass
...
>>> import inspect
>>> inspect.signature(hello)
<Signature (name: 'Unknown', age: 'int' = None)>

Dans ce cas, le type ʻUnknown ne peut pas être résolu, donc le type de l'argument ʻage n'est pas ʻOptional [int] , mais simplement ʻint.

Recommended Posts

À partir de Python 3.10, le formulaire retourné par inspect.signature () semble être basé sur typing.get_type_hints ().
Introduction à Python avec Atom (en route)
Modifiez la chaîne de caractères à remplacer en fonction de la chaîne de caractères correspondante en la remplaçant par l'expression régulière Python
Comment changer le fichier de configuration pour qu'il soit lu par Python
Enregistrer des images sur le Web sur un lecteur avec Python (Colab)
[Python] J'ai essayé de visualiser la nuit du chemin de fer de la galaxie avec WordCloud!
Ajouter un intervalle de confiance de 95% des deux côtés pour la figure avec Python / Matplotlib
Utilisez python sur Raspberry Pi 3 pour éclairer la LED avec le contrôle du commutateur!
J'ai essayé avec les 100 meilleurs packages PyPI> J'ai essayé de représenter graphiquement les packages installés sur Python
Correction d'un bug où node.surface ne pouvait pas être obtenu avec python3 + mecab
Python 3.9 dict merge (`|`) semble être utile
Télécharger des fichiers sur le Web avec Python
La route de la compilation vers Python 3 avec Thrift
GAE --Avec Python, faites pivoter l'image en fonction des informations de rotation d'EXIF et importez-la dans Cloud Storage.
[Python] Comment enregistrer des images sur le Web à la fois avec Beautiful Soup
Le moyen le plus simple de synthétiser la voix avec python
Essayez de résoudre le diagramme homme-machine avec Python
Spécifiez le fichier exécutable Python à utiliser avec virtualenv
Dites bonjour au monde avec Python avec IntelliJ
[Road to Intermediate] Python semble être tous des objets
Le moyen le plus simple d'utiliser OpenCV avec python
[Python] Il semble y avoir quelque chose appelé __dict__
Connectez-vous à MySQL avec Python sur Raspberry Pi
Utilisez tkinter pour déplacer le code de sortie en tant que "A et prétendant être B" en python
Commerce de système à partir de Python3: les stocks de bio-santé à examiner dans le nouveau Corona
Réfléchissez à la programmation de Python sur votre iPad
Essayez de résoudre le livre des défis de programmation avec python3
[Introduction à Python] Comment itérer avec la fonction range?
J'ai essayé d'implémenter Mine Sweeper sur un terminal avec python
Essayez de résoudre le problème d'affectation du médecin de formation avec Python
J'ai essayé de toucher un fichier CSV avec Python
Étapes pour installer le dernier Python sur votre Mac
J'ai essayé de résoudre Soma Cube avec python
Commande Yum pour accéder à MySQL avec Python 3 sous Linux
[Python] Comment spécifier l'emplacement de téléchargement avec youtube-dl
Introduction aux mathématiques à partir du mémo d'étude Python Vol.1
Faire un point d'arrêt sur la couche c avec python
Lisez le fichier xml en vous référant au didacticiel Python
Convertissez l'image au format .zip en PDF avec Python
Je veux hériter de l'arrière avec la classe de données python
Informations pour contrôler les moteurs avec Python sur RaspberryPi
Je veux AWS Lambda avec Python sur Mac!
Spécifiez MinGW comme compilateur utilisé dans Python
J'ai essayé de résoudre le problème avec Python Vol.1
[Python] Comment réécrire le style de table avec python-pptx [python-pptx]
Comment profiter de Python sur Android !! Programmation en déplacement !!
Comment gérer le phénomène que Python (notebook Jupyter) exécuté sur WSL devient abandonné
python> Est-il possible de faire des commentaires en ligne?> Il semble que ce soit sur plusieurs lignes
J'ai créé une classe pour obtenir le résultat de l'analyse par MeCab dans ndarray avec python
Comment calculer le rayonnement X (CXB) de fond d'espace avec Python en spécifiant la plage de flux
Comment connaître le nombre de GPU de python ~ Remarques sur l'utilisation du multitraitement avec pytorch ~
Ce qui semble être un modèle pour la partie d'entrée standard du pro de la concurrence en python3
Essayez d'importer dans la base de données en manipulant ShapeFile d'informations numériques sur les terres nationales avec Python