Ab Python 3.10 scheint das von inspect.signature () zurückgegebene Formular auf typing.get_type_hints () zu basieren.

Wie ich heute bemerkt habe, verwendet das Python 3.10-Inspektionsmodul jetzt typing.get_type_hints (), um Typen zu interpretieren. Das entsprechende Commit lautet hier ist.

Dies scheint ein Fix im Zusammenhang mit der verzögerten Auswertung von Anmerkungen zu sein, die standardmäßig ab Python 3.10 aktiviert sind. Da die in obj .__ annotations__ gepackten Typanmerkungsinformationen zu einer Zeichenfolge werden, kann beurteilt werden, dass es angemessen ist, sie typing.get_type_hints ()` zu überlassen. Mit dieser Änderung werden die Typinformationen von "inspect.signature ()", die sich einfach auf "obj .__ annotations__" beziehen, auf das Analyseergebnis umgeschaltet, das einen Schritt weiter geht.

In Python 3.9 wird beispielsweise das folgende Funktionsargument "hello ()" name "als" str "-Typ behandelt.

$ 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)>

In Python 3.10 (in Entwicklung) wird es hingegen als optionaler Typ [str] betrachtet. Da das Standardargument "Keine" lautet, wird ein besserer Typ zurückgegeben.

$ 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)>

Übrigens, wenn der Name zur Laufzeit nicht aufgelöst werden kann (z. B. wenn "typing.TYPE_CHECKING" zur Laufzeit nicht importiert wird), wird auf "obj .__ Signatur__" wie zuvor verwiesen, sodass sich das Interpretationsergebnis je nach Anmerkung ändern kann.

$ 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)>

In diesem Fall kann der Typ "Unbekannt" nicht aufgelöst werden, daher ist der Typ des Arguments "Alter" nur "int" anstelle von "Optional [int]".

Recommended Posts

Ab Python 3.10 scheint das von inspect.signature () zurückgegebene Formular auf typing.get_type_hints () zu basieren.
Einführung in Python mit Atom (unterwegs)
Ändern Sie die zu ersetzende Zeichenfolge entsprechend der übereinstimmenden Zeichenfolge, indem Sie sie durch den regulären Python-Ausdruck ersetzen
So wechseln Sie die Konfigurationsdatei, die von Python gelesen werden soll
Speichern Sie Bilder im Web mit Python (Colab) auf einem Laufwerk.
[Python] Ich habe versucht, die Nacht der Galaxienbahn mit WordCloud zu visualisieren!
Fügen Sie auf beiden Seiten ein Konfidenzintervall von 95% hinzu, um mit Python / Matplotlib zu rechnen
Verwenden Sie Python auf Raspberry Pi 3, um die LED mit Schaltersteuerung zu beleuchten!
Ich habe es mit den Top 100 PyPI-Paketen versucht.> Ich habe versucht, die auf Python installierten Pakete grafisch darzustellen
Es wurde ein Fehler behoben, bei dem node.surface mit python3 + mecab nicht abgerufen werden konnte
Python 3.9 Dict Merge (`|`) scheint nützlich zu sein
Laden Sie mit Python Dateien im Web herunter
Der Weg zum Kompilieren zu Python 3 mit Thrift
GAE - Drehen Sie mit Python das Bild basierend auf den Rotationsinformationen von EXIF und laden Sie es in den Cloud-Speicher hoch.
[Python] So speichern Sie Bilder mit Beautiful Soup sofort im Web
Der einfachste Weg, um Stimme mit Python zu synthetisieren
Versuchen Sie, das Mensch-Maschine-Diagramm mit Python zu lösen
Geben Sie die ausführbare Python-Datei an, die mit virtualenv verwendet werden soll
Begrüßen Sie die Welt mit Python mit IntelliJ
[Road to Intermediate] Python scheint alles Objekte zu sein
Der einfachste Weg, OpenCV mit Python zu verwenden
[Python] Es scheint etwas zu geben, das __dict__ heißt
Stellen Sie mit Python auf Raspberry Pi eine Verbindung zu MySQL her
Verwenden Sie tkinter, um den Ausgabecode in Python als "A und vorgeben, B zu sein" zu verschieben
Systemhandel beginnend mit Python3: Bio-Health-Aktien in der neuen Corona
Überlegen Sie, wie Sie Python auf Ihrem iPad programmieren können
Versuchen Sie, das Programmier-Herausforderungsbuch mit Python3 zu lösen
[Einführung in Python] Wie iteriere ich mit der Bereichsfunktion?
Ich habe versucht, Mine Sweeper auf dem Terminal mit Python zu implementieren
Versuchen Sie, das Problem der Zuweisung von Schulungsärzten mit Python zu lösen
Ich habe versucht, eine CSV-Datei mit Python zu berühren
Schritte zum Installieren des neuesten Python auf Ihrem Mac
Ich habe versucht, Soma Cube mit Python zu lösen
Yum-Befehl zum Zugriff auf MySQL mit Python 3 unter Linux
[Python] So legen Sie den Download-Speicherort mit youtube-dl fest
Einführung in die Mathematik ab Python Study Memo Vol.1
Machen Sie mit Python einen Haltepunkt auf der c-Ebene
Lesen Sie die XML-Datei anhand des Python-Tutorials
Konvertieren Sie das Bild in .zip mit Python in PDF
Ich möchte mit Python-Datenklasse nach hinten erben
Informationen zur Steuerung von Motoren mit Python auf RaspberryPi
Ich möchte Lambda mit Python auf Mac AWS!
Geben Sie MinGW als den in Python verwendeten Compiler an
Ich habe versucht, das Problem mit Python Vol.1 zu lösen
[Python] So schreiben Sie den Tabellenstil mit python-pptx um [python-pptx]
Wie man Python auf Android genießt !! Programmieren für unterwegs !!
Wie man mit dem Phänomen umgeht, dass Python (Jupyter Notebook) auf WSL ausgeführt wird, wird abgebrochen
Python> Ist es möglich, Inline-Kommentare abzugeben?> Es scheint, dass es sich um mehrere Zeilen handeln muss
Ich habe eine Klasse erstellt, um das Analyseergebnis von MeCab in ndarray mit Python zu erhalten
Berechnung der Weltraumhintergrund-Röntgenstrahlung (CXB) mit Python durch Angabe des Flussbereichs
Wie man die Anzahl der GPUs aus Python kennt ~ Hinweise zur Verwendung von Multiprocessing mit pytorch ~
Was scheint eine Vorlage für den Standardeingabe-Teil des Competition Pro in Python3 zu sein
Versuchen Sie, in die Datenbank zu importieren, indem Sie ShapeFile mit numerischen Informationen zum nationalen Land mit Python bearbeiten