Ich habe einen Artikel veröffentlicht, der den Inhalt von Was ist neu in Python 3.5?
Der Veröffentlichungszyklus war ein Jahr, und als ich dachte, dass 3.9 erst neulich herausgekommen war, war a2 von 3.10 bereits herausgekommen (Schweiß). Wie ich in hier geschrieben habe, wird die nächste Alpha-Version zur gleichen Zeit wie die offizielle Version veröffentlicht, liegt also im Zeitplan, aber das Tempo ist etwas schneller. (^^;
Trotzdem bin ich gespannt, was in der nächsten Version herauskommen wird, daher möchte ich es extrahieren und zusammenfassen. Die nächste Version von 3.9 ist 3.10 statt 4.0 (lacht). Zunächst die übliche Entwicklungs-Roadmap (PEP-619).
Wenn es nach Plan läuft, wird 3.10 im Oktober 2021 erscheinen, nur ein Jahr nach 3.9.
2020.11.07
Erste Version. a2 wurde am 04.10.2020 veröffentlicht, aber ich schreibe basierend auf den Neuerungen.
Als neue Funktion von Python-3.7 "[Bewertung von Verzögerungsanmerkungen](https://qiita.com/ksato9700/items/35a0bdc04693b3b09757#pep-563-%E3%82%A2%E3%83%8E%E3%83] % 86% E3% 83% BC% E3% 82% B7% E3% 83% A7% E3% 83% B3% E3% 81% AE% E8% A9% 95% E4% BE% A1% E3% 82% 92 % E9% 81% 85% E3% 82% 89% E3% 81% 9B% E3% 82% 8B) ", aber dieses Verhalten ist jetzt die Standardeinstellung. Also, bis jetzt, um eine verzögerte Auswertung zu ermöglichen
from __future__ import annotations
Es war notwendig, die import-Anweisung zu setzen, aber ab 3.10 wird es nicht notwendig sein. Zum Zeitpunkt von 3.7 wurde geschrieben, dass "es der Standard in Python-4.0 werden wird", aber es war 3.10.
Und einige der Funktionen des Typanmerkungssystems haben sich geändert. Eines ist das Verhalten von "inspect.signature", das den Typ selbst zurückgibt, anstatt die Zeichenfolgendarstellung des Typs zurückzugeben. Wenn Sie beispielsweise versuchen, den Parametertyp einer Funktion mit dem folgenden Code anzuzeigen
from __future__ import annotations
import inspect
def func_a(a: int, b: list, c: C):
pass
class C:
pass
sig = inspect.signature(func_a)
for (name, param) in sig.parameters.items():
print(name, repr(param.annotation))
Vor Python-3.9
a 'int'
b 'list'
c 'C'
Die Zeichenfolge wird wie folgt zurückgegeben, jedoch von Python-3.10
a <class 'int'>
b <class 'list'>
c <class '__main__.C'>
Ein Klassenobjekt vom Typ wird in Form von zurückgegeben. Wird "Klasse C" nicht gefunden, wird die Zeichenfolge "C" wie zuvor zurückgegeben.
Typ-Aliase (Aliasing-Typen) wurden in PEP 484 eingeführt, werden jedoch durch Zuweisungsausdrücke der obersten Ebene dargestellt. Daher gab es das Problem, dass es schwierig war, es von der Zuordnung zu einer normalen Variablen zu unterscheiden. Eine Anmerkung mit dem Namen "TypeAlias" wird hinzugefügt, um zu verdeutlichen, dass es sich um einen Typalias handelt.
Zum Beispiel bis jetzt
IntType = int
Was wurde geschrieben
IntType: TypeAlias = int
Sie können so schreiben.
Dies ist auch eine Änderung der Typbeziehung, aber bis jetzt, wenn Variablen mit Typanmerkungen verwendet werden, die zwei oder mehr Typen annehmen
number: Union[int, float]
Wo ich schreiben musste
number: int | float
Sie können schreiben. Es fühlt sich an, als würde man die Notation einbinden, die auch in TypeScript verwendet wird.
Ein Parameter namens "stric" wird zur Funktion "zip ()" hinzugefügt. Wenn dies "True" ist, wird überprüft, ob die beiden zu komprimierenden Iterables dieselbe Länge haben. Wenn die Längen unterschiedlich sind, wird eine ValueError-Ausnahme ausgelöst.
Eine Methode namens "bit_count ()" wurde zu einer Variablen vom Typ "int" hinzugefügt. Dies dient dazu, die Zahl "1" zurückzugeben, wenn der numerische Wert der Ganzzahl in Binär ausgedrückt wird. Es scheint, dass dies auch als Bevölkerungszahl (oder Pop-Anzahl) bezeichnet wird, aber im Grunde ist es dasselbe wie "bin (a) .count (" 1 ")" und es kann schneller verarbeitet werden. Es scheint, dass es geworden ist.
Das Ansichtsobjekt, das von den Wörterbuchtypmethoden keys ()
, values ()
unditems ()
zurückgegeben wird, hat ein Attribut namens Mapping
, das den Zugriff auf die ursprünglichen Wörterbuchtypdaten ermöglicht.
Dezimal und Bruch können nicht mehr als ganzzahlige Argumentwerte verwendet werden. Der folgende Code hat beispielsweise "DeprecationWarning" in Python-3.9 ausgegeben. Aus Python-3.10 wird jedoch ein Fehler.
from decimal import Decimal
i = Decimal(97)
print(chr(i))
(Noch nicht)
base64
Base64.b43hexencode ()
und base64. Zur Unterstützung des in [RFC-4648] definierten erweiterten Hex-Alphabets (https://tools.ietf.org/html/rfc4648.html#section-7) b43hexdecode ()
wurde hinzugefügt. Das reguläre Base32-Alphabet verwendet keine '0' und '1', die anderen Zeichen ähneln, aber dieses erweiterte Hex-Alphabet verwendet sie und ordnet sie stattdessen zu. Es zeichnet sich dadurch aus, dass die Charaktere in der richtigen Reihenfolge sortiert sind (obwohl es ein Rätsel ist, was mich glücklich macht).
curses
Sie können die in ncurses 6.1 eingeführten erweiterten Farben verwenden. Sie können mit curses.has_extended_color_support ()
überprüfen, ob die von Python verwendete ncurses-Bibliothek dies unterstützt.
glob
Die Parameter root_dir
und dir_fd
wurden zuglob ()
und iglob ()
hinzugefügt, damit Sie das Stammverzeichnis für die Dateisuche angeben können. Ersteres ist ein pfadähnliches Objekt und letzteres gibt den Dateideskriptor des Stammverzeichnisses an.
types
types.EllipsisType
, types.NoneType
, types.NotImplementedType
wurden (neu) eingeführt.
str ()
bytes ()
bytesarray ()
ist schneller (30-40% für kleine Objekte)runpy
Modul importiert weniger Module und die Startzeit ist im Durchschnitt 1,3-mal schneller, wenn es mit python -m Modulname
ausgeführt wird.__int__
, __float__
, __floordiv__
, __mod__
, __divmod__
, __rfloordiv__
, __rmod__
, __rdivmod__
der Klasse complex
wurden gelöscht.Hier ist eine Zusammenfassung der Änderungen in Python 3.10. Bis zur offiziellen Veröffentlichung von a2 sind noch 11 Monate übrig, daher denke ich, dass es in Zukunft Änderungen geben wird, aber ich würde gerne mithalten.
Recommended Posts