Was ist neu in Python 3.6?

Einführung

Zuvor habe ich einen Artikel [Was ist neu in Python 3.5] geschrieben (http://qiita.com/ksato9700/items/9a0aef07d90d00e67525), aber da die Alpha-Version von 3.6 herausgekommen ist, werde ich die Funktionen von 3.6 vorwegnehmen. Ich werde es überprüfen.

Gemäß der Entwicklungs-Roadmap (PEP-494)

--3.6.0 Alpha 1: 17.05.2016 (abgeschlossen) --3.6.0 alpha 2: 2016-06-13 (abgeschlossen) --3.6.0 alpha 3: 2016-07-11 (abgeschlossen) --3.6.0 alpha 4: 2016-08-15 (abgeschlossen) --3.6.0 Beta 1: 2016-09-12 (Abgeschlossen und neue Funktionen bis hierher hinzugefügt)

Das Ziel ist noch lang. Die endgültige Version wird am 16. Dezember veröffentlicht. Vor Weihnachten. Neue Funktionen werden bis zur Beta im September hinzugefügt, daher denke ich, dass sie sich bis dahin stetig ändern werden, aber ich werde diesen Artikel aktualisieren, wenn sich etwas ändert. Es ist einfacher als alles auf einmal zu sehen (^^;

Also habe ich diesmal auf 3.6.0b1 verwiesen und auf den Entwurf des Veröffentlichungsdokuments von hier.

Verwenden Sie Pyenv, um es zu versuchen

pyenv install 3.6.0b1
pyenv local 3.6.0b1

Bitte.

Änderungsprotokoll

2016.07.16

2016.10.01

Änderungen

Highlights veröffentlichen

Einführung der neuen Grammatik

PEP-498, PEP-515 und PEP-526 werden unter "Neue Funktionen" ausführlicher erwähnt.

Verbesserte Sicherheit

Neue eingebaute Funktion

--PEP-520 (https://www.python.org/dev/peps/pep-0520/) Behält die Definitionsreihenfolge der Klassenattribute bei --PEP-468 (https://www.python.org/dev/peps/pep-0468/) Behalten Sie die Reihenfolge der Keyword-Argumente bei

neue Funktion

PEP-515 Jetzt können Sie "_" in ein numerisches Literal einfügen

Sie können jetzt "1000000000000000" als "1_000_000_000_000_000" schreiben. Es ist nur "_" für die Lesbarkeit, ohne semantische Änderungen.

PEP-523 Hinzufügen einer Frame-Evaluierungs-API

Die Auswertung von Frame-Objekten konnte bisher nicht angepasst werden, wir haben jedoch eine C-Level-API hinzugefügt, um dies zu ermöglichen. Dies scheint die Implementierung von JIT und Debugger zu vereinfachen.

PEP-519 Hinzufügen des Dateisystempfadprotokolls

In der Vergangenheit waren Dateisystempfade vom Typ "str" oder "bytes", und Bibliotheken, die Pfade verarbeiten, einschließlich derjenigen des Python-Standards, wurden mit dieser Annahme erstellt. Dies machte es schwierig, eine Pfadrepräsentationsbibliothek in Kombination mit einer vorhandenen Bibliothek wie pathlib zu verwenden. ..

Um dies zu lösen, haben wir eine Schnittstelle (virtuelle Basisklasse) namens "os.PathLike" definiert. Das Objekt, das den Pfad darstellt, erbt dies. Durch Definieren einer Methode namens "fspath ()", die eine Zeichenfolgendarstellung des Pfads zurückgibt, erkennen andere Bibliotheken dies als Pfad und arbeiten. Es war.

PEP-498 Formatiertes Zeichenfolgenliteral

Stellen Sie der Zeichenfolge "f" voran, um sie zu einer formatierten Zeichenfolge zu machen. Ähnlich wie im str.format-Format, jedoch wird der von { und } eingeschlossene Teil als Variable ersetzt. Zum Beispiel so.

>>> name = "Monty Python"
>>> f"mein Name ist{name}ist"
'Ich heiße Monty Python'

Dies ist, wenn str.format verwendet wird

>>> "mein Name ist{name}ist".format(name=name)

Oder

>>> "mein Name ist{}ist".format(name)

Ich musste es tun, daher scheint es etwas einfacher zu beschreiben.

PEP-526 Einführung der Notation zum Kommentieren von Variablen

Python ist eine dynamisch typisierte Sprache ohne explizite Typisierung, hat jedoch das Problem, dass es schwierig ist, statische Analysen durchzuführen. Um dies zu lösen, schlug PEP-484 (https://www.python.org/dev/peps/pep-0484/) eine Methode zum Hinzufügen von Typinformationen zum Funktionsargument und in Python 3.5 vor Eingeführt.

Diese Änderung soll dies weiter erweitern, sodass Variablen (einschließlich Klassenvariablen und Instanzvariablen) auch Typinformationen erhalten können. In der Vergangenheit war es möglich, dasselbe mithilfe von Kommentaren zu tun, aber der Unterschied besteht darin, dass dies durch Ändern der Grammatik behandelt wurde. Zum Beispiel so.

from typing import List, Dict
 
primes: List[int] = [] #Ein Beispiel für einen ganzzahligen Listentyp, der mit einer leeren Liste initialisiert wird

captain: str  #Zeichenfolgentyp. Beispiel für das Nichtinitialisieren

class Starship:
    stats: Dict[str, int] = {} #Beispiel für Klassenvariablen. Wörterbuchtyp, der eine Zeichenfolge als Schlüssel und eine Ganzzahl als Wert verwendet

Beachten Sie, dass diese Typanmerkung das Verhalten nicht ändert und das Zuweisen eines Werts eines anderen Typs keinen Fehler verursacht. Es ist nur ein "Hinweis" für Typinformationen und dient zur statischen Analyse auf der Grundlage dieser Informationen.

PEP-529 Die Windows-Dateisystemcodierung wurde in UTF-8 geändert

In der Vergangenheit kann es beim Übergeben von Pfaden mit Bytes unter Windows zu Datenverlust kommen. Ab Python 3.6 wird es, selbst wenn Sie Bytes verwenden, codiert und mit der Standardcodierung des Systems zurückgegeben. Die Standardcodierung ist bisher UTF-8, kann sich jedoch je nach Feedback während der Beta-Phase ändern.

PEP-487 Einfache Anpassung der Klassengenerierung

Wenn eine Klasse geerbt wird, wird eine Klassenmethode namens "init_subclass (cls)" aufgerufen. Hier können Sie benutzerdefinierten Code schreiben. Außerdem wird beim Initialisieren des Deskriptorobjekts eine Methode namens "set_name" aufgerufen.

PEP-528 Die Windows-Konsolencodierung wurde in UTF-8 geändert

Es akzeptiert jetzt alle Unicode-Zeichen und kann korrekt in ein str-Objekt eingelesen werden. Und die Standardcodierung von "sys.stdin", "sys.stdout", "sys.stderr" ist UTF-8.

Umgebungsvariable PYTHONMALLOC

Durch Eingabe eines Werts in eine Umgebungsvariable namens PYTHONMALLOC können Sie das Verhalten der Speicherzuordnung von Python ändern oder einen Hook für das Debuggen festlegen.

PYTHONMALLOC=debug Mit dieser Einstellung werden die folgenden Debugging-Funktionen aktiviert.

PYTHONMALLOC=malloc Diese Einstellung erzwingt die Verwendung des "malloc" der C-Bibliothek. Auf diese Weise können Sie externe Tools wie Valgrind verwenden.

PYTHONMALLOC=malloc_debug Kombination der beiden oben genannten

DTrace- und System-Tap-Unterstützung

Beim Kompilieren mit "--with-dtrace" werden die Markierungen aktiviert, die die folgenden Ereignisse erkennen.

Mit dieser Funktion können Sie Python debuggen und profilieren, ohne es zum Debuggen neu kompilieren zu müssen.

PEP-520 Beibehaltung der Definitionsreihenfolge der Klassenattribute

Klassenattribute werden im Attribut __dict __ der Klasse in der Reihenfolge beibehalten, in der sie im Quellcode erscheinen.

PEP-468 Beibehalten der Reihenfolge der Schlüsselwortargumente

Funktionsschlüsselwortargumente werden in einer beibehaltenen Reihenfolge an ** kwargs übergeben.

PEP-509 Einführung der internen Version des Objekts vom Typ Wörterbuch

Einführung einer Version, die nur aktualisiert wird, wenn Änderungen an Wörterbuchobjekten vorgenommen werden. Dadurch können verschiedene Optimierungen (Leistungsverbesserungen) durchgeführt werden.

Andere Sprachänderungen

--Now gibt ModuleNotFoundError zurück, wenn import das Modul nicht finden kann

Neues Modul

(Keine bis jetzt)

Verbessertes Modul

asyncio Da asyncio als "vorläufig" definiert ist, werden alle Änderungen auch auf 3.5.x zurückportiert.

Die wichtigsten Änderungen gegenüber 3.5.0 sind wie folgt.

Ich habe Asyncio nicht sehr oft verwendet, aber ich habe versucht, "run_coroutine_threadsafe ()" zu verwenden.

asyncio_test.py


import asyncio

@asyncio.coroutine
def wakeup(name, repeat):
    for i in range(repeat):
        yield from asyncio.sleep(1)
        print("{}/{}:aufgewacht!".format(name, i))
    return repeat

def target(name, repeat, loop):
    future = asyncio.run_coroutine_threadsafe(wakeup(name, repeat), loop)
    return future.result()

loop = asyncio.get_event_loop()

futures = [
    loop.run_in_executor(None, target, "A", 1, loop),
    loop.run_in_executor(None, target, "B", 2, loop),
    loop.run_in_executor(None, target, "C", 3, loop),
]

loop.run_until_complete(asyncio.wait(futures))
loop.close()

Es ist ein wenig verwirrend, aber das Collout, das "Aufwachen" ausführt. Nachdem Sie 1 Sekunde geschlafen haben, drucken Sie einfach die Zeile "Wake up!" Mit dem Namen "name". Wiederholen Sie es so oft wie das andere Argument "wiederholen". Die Funktion "target" führt das Collout aus und ruft darin "run_coroutine_threadsafe" auf. Ich führe es mit "run_in_executor" aus, um es in einem separaten Thread auszuführen.

Das Ausführungsergebnis sollte so aussehen.

$ python asyncio_test.py
A/0:aufgewacht!
B/0:aufgewacht!
C/0:aufgewacht!
B/1:aufgewacht!
C/1:aufgewacht!
C/2:aufgewacht!

Wie oben erwähnt, wurde diese asynchrone Änderung auf die 3.5-Serie zurückportiert, und es scheint, dass sie bereits in 3.5.1 implementiert wurde. In der Tat funktioniert das obige Beispiel gut.

contextlib Contextlib.AbstractContextManager wurde als virtuelle Basisklasse für Kontextmanager hinzugefügt, um Standardimplementierungen für __enter__ () und__exit__ ()bereitzustellen. Eine ähnliche Klasse wurde auch dem Typisierungsmodul hinzugefügt.

venv venv akzeptiert jetzt den Parameter --prompt. Auf diese Weise können Sie das Präfix der Eingabeaufforderung in einer virtuellen Umgebung ändern.

datetime Die Methoden "datetime.strftime ()" und "date.strftime ()" unterstützen jetzt ISO 8601 "% G", "% u" und "% V". % G und% V stehen für die Jahres- und Wochennummer (01-53) in wöchentlicher Notation und% u für die Wochennummer (Montag ist 1 und Sonntag ist 7).

distutils.command.sdist Das Attribut default_format wurde aus distutils.command.sdist.sdist entfernt und das Standardattribut lautet jetzt ['gztar']. Unerwarteterweise muss jeder Code, der von diesem Attribut abhängt, behoben werden.

email Die neue Mail-API mit dem hinzugefügten Richtlinienargument ist nicht mehr "vorläufig" und die Dokumentation wurde um sie herum neu geschrieben. Die herkömmliche Dokumentation bleibt als Legacy-API erhalten.

Die Klasse "email.mime" und "DecodedGenerator" akzeptieren jetzt Richtlinienargumente.

Dem Richtlinienobjekt wurde das Attribut "message_factory" hinzugefügt, damit der Parser angeben kann, welche Nachrichtenklasse beim Generieren einer neuen Nachricht verwendet werden soll.

encodings "Oem" hinzugefügt, um "CP_OEMCP" in einer Windows-Umgebung zu verwenden. Außerdem wurde zu "mbcs" ein Alias namens "ansi" hinzugefügt, der "CP_ACP" verwendet.

faulthandler Installiert jetzt Handler, die Windows-Ausnahmen in einer Windows-Umgebung auslösen.

hashlib hashlib unterstützt jetzt OpenSSL 1.1.0. Die empfohlene Version ist 1.0.2 oder höher, wurde jedoch auch mit 0.9.8zc, 0.9.8zh, 1.0.1t und LibreSSL 2.3, 2.4 getestet.

Unterstützung für die BLAKE2-Hash-Funktion wurde hinzugefügt, und blake2b () und blake2s () sind jetzt verfügbar.

SHA-3-Hash-Funktionen sha3_224 (), sha3_256 (), sha3_384 (), sha3_512 () und SHAKE-Hash-Funktionen Shake_128 (), Shake_256 () wurden hinzugefügt.

Aktiviert, wenn die kennwortbasierte Schlüsselableitungsfunktion scrypt () OpenSSL 1.1.0 oder höher ist.

http.client

HTTPConnection.request () und endheaders () unterstützen jetzt die Chunked-Codierung im Anforderungshauptteil.

idlelib und IDLE

Das idlelib-Paket wurde auf moderne Weise überarbeitet, um das Erscheinungsbild, die Bedienbarkeit und die Sichtbarkeit von IDLE zu verbessern. Die Änderungen umfassen das Ändern des Dateinamens, und der Code bis 3.5 funktioniert nicht so wie er ist.

importlib importlib.util.LazyLoader ruft jetzt create_module () auf dem Wrapper Loader auf, sodass importlib.machinery.BuiltinImporter und importlib.machinery.ExtensionFileLoader zusammen mit importlib.util.LazyLoader sind Es gibt keine Einschränkung mehr, für die es nicht verwendet werden kann.

"importlib.util.cache_from_source ()", "importlib.util.source_from_cache ()" und "importlib.util.spec_from_file_location ()" können jetzt pfadähnliche Objekte empfangen.

json json.load () und json.loads () können jetzt Binärdateien als Eingabe akzeptieren. Der codierte JSON muss in UTF-8, UTF-16 oder UTF-32 codiert sein.

os Es wurde eine Methode "close ()" bereitgestellt, um den "scandir ()" - Itator explizit zu schließen. Und der Iterator scandir () unterstützt jetzt das Kontextmanagerprotokoll. Wenn der Iterator "scandir ()" nicht erschöpft oder explizit geschlossen ist, wird im Destruktor eine "ResourceWarning" -Ausnahme ausgelöst. Ich denke, dies ist eine Gegenmaßnahme gegen Speicherverluste, aber wenn Sie sie mit der with-Anweisung verwenden, wird sie automatisch aufgerufen.

Der Linux-Systemaufruf "getrandom ()" ist jetzt über die neue Funktion "os.getrandm ()" verfügbar.

pickle Sie können jetzt Objekte, die "new" heißen mussten, mit Schlüsselwortargumenten salzen (pickle). Dies war mit Pickle Version 4 oder höher möglich, aber mit dieser Änderung ist es jetzt mit Version 3 oder niedriger möglich.

re

Qualifizierer für reguläre Ausdrücke hinzugefügt. Zum Beispiel stimmt "(? I: p) ython" mit "Python" und "Python" überein, aber nicht mit "Python". In ähnlicher Weise entspricht "(? I) g (? -I: v) r" "GvR" und "gvr", aber nicht "GVR".

readline set_auto_history () wurde hinzugefügt, und es ist jetzt möglich zu steuern, ob es automatisch zum Verlauf hinzugefügt wird oder nicht.

rlcompleter rlcompleter ist eine Readline-Vervollständigung. Die erste Änderung besteht darin, Modulvariablen, Methoden und Attribute, die mit einem Unterstrich ('_') beginnen, aus der Liste der Vervollständigungen zu entfernen. Es ist schwer zu verstehen, deshalb hier ein Beispiel. Zuvor, als ich Python im interaktiven Modus startete, "int" eingab und dann zweimal die TAB-Taste drückte, geschah dies.

$ python
Python 3.5.2 (default, Jul  7 2016, 23:37:57)
[GCC 4.2.1 Compatible Apple LLVM 7.3.0 (clang-703.0.31)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> int.<TAB><TAB>
int.__abs__(            int.__dir__(            int.__hash__(           int.__mul__(            int.__reduce__(         int.__rtruediv__(       int.__xor__(
int.__add__(            int.__divmod__(         int.__index__(          int.__name__            int.__reduce_ex__(      int.__rxor__(           int.bit_length(
int.__and__(            int.__doc__             int.__init__(           int.__ne__(             int.__repr__(           int.__setattr__(        int.conjugate(
int.__base__(           int.__eq__(             int.__instancecheck__(  int.__neg__(            int.__rfloordiv__(      int.__sizeof__(         int.denominator
int.__bases__           int.__flags__           int.__int__(            int.__new__(            int.__rlshift__(        int.__str__(            int.from_bytes(
int.__basicsize__       int.__float__(          int.__invert__(         int.__or__(             int.__rmod__(           int.__sub__(            int.imag
int.__bool__(           int.__floor__(          int.__itemsize__        int.__pos__(            int.__rmul__(           int.__subclasscheck__(  int.mro(
int.__call__(           int.__floordiv__(       int.__le__(             int.__pow__(            int.__ror__(            int.__subclasses__(     int.numerator
int.__ceil__(           int.__format__(         int.__lshift__(         int.__prepare__(        int.__round__(          int.__subclasshook__(   int.real
int.__class__(          int.__ge__(             int.__lt__(             int.__qualname__        int.__rpow__(           int.__text_signature__  int.to_bytes(
int.__delattr__(        int.__getattribute__(   int.__mod__(            int.__radd__(           int.__rrshift__(        int.__truediv__(
int.__dict__            int.__getnewargs__(     int.__module__          int.__rand__(           int.__rshift__(         int.__trunc__(
int.__dictoffset__      int.__gt__(             int.__mro__             int.__rdivmod__(        int.__rsub__(           int.__weakrefoffset__
>>> int.

Dies wird ab 3.6 so sein.

ython 3.6.0a3 (default, Jul 16 2016, 00:35:58)
[GCC 4.2.1 Compatible Apple LLVM 7.3.0 (clang-703.0.31)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> int.
int.bit_length(  int.conjugate(   int.denominator  int.from_bytes(  int.imag         int.mro(         int.numerator    int.real         int.to_bytes(

Namen, die mit "" beginnen, sind von den Abschlusskandidaten ausgeschlossen. Wenn Sie sie sehen möchten, geben Sie "" und dann " " ein.

>>> int.__
int.__abs__(             int.__dict__             int.__getattribute__(    int.__lt__(              int.__prepare__(         int.__ror__(             int.__subclasscheck__(
int.__abstractmethods__  int.__dictoffset__       int.__getnewargs__(      int.__mod__(             int.__qualname__         int.__round__(           int.__subclasses__(
int.__add__(             int.__dir__(             int.__gt__(              int.__module__           int.__radd__(            int.__rpow__(            int.__subclasshook__(
int.__and__(             int.__divmod__(          int.__hash__(            int.__mro__              int.__rand__(            int.__rrshift__(         int.__text_signature__
int.__base__(            int.__doc__              int.__index__(           int.__mul__(             int.__rdivmod__(         int.__rshift__(          int.__truediv__(
int.__bases__            int.__eq__(              int.__init__(            int.__name__             int.__reduce__(          int.__rsub__(            int.__trunc__(
int.__basicsize__        int.__flags__            int.__instancecheck__(   int.__ne__(              int.__reduce_ex__(       int.__rtruediv__(        int.__weakrefoffset__
int.__bool__(            int.__float__(           int.__int__(             int.__neg__(             int.__repr__(            int.__rxor__(            int.__xor__(
int.__call__(            int.__floor__(           int.__invert__(          int.__new__(             int.__rfloordiv__(       int.__setattr__(
int.__ceil__(            int.__floordiv__(        int.__itemsize__         int.__or__(              int.__rlshift__(         int.__sizeof__(
int.__class__(           int.__format__(          int.__le__(              int.__pos__(             int.__rmod__(            int.__str__(
int.__delattr__(         int.__ge__(              int.__lshift__(          int.__pow__(             int.__rmul__(            int.__sub__(
>>> int.__

Nach dem Ausfüllen einiger Schlüsselwörter wurde ein Leerzeichen ('') oder ein Doppelpunkt (':') hinzugefügt. Wenn Sie beispielsweise "wi" eingeben und "" drücken, wird dies mit "mit" mit einem Leerzeichen abgeschlossen. Wenn Sie "tr" eingeben, führt "" zu "try:". Praktisch für Nüchternheit.

Es wird auch gesagt, dass es möglich geworden ist, Attribute zu ergänzen, die mit "@ property" erstellt wurden und bisher nicht angezeigt wurden, aber ich war mir nicht sicher.

site Ich suche nach Duplikaten, wenn ich einen Pfad zu sys.path hinzufüge, aber es scheint eine Lösung zu sein, wenn es nicht funktioniert.

sqlite3 sqlite3.Cursor.lastrowid gibt die Spalten-ID der zuletzt geänderten Spalte zurück, die nur gültig war, als INSERT bisher ausgeführt wurde. Jetzt kann sie abgerufen werden, wenn REPLACE ausgeführt wird.

socket Sie können jetzt SIO_LOOPBACK_FAST_PATH mit der Funktion ioctl () verwenden, um die TCP-Loopback-Leistung in Windows-Umgebungen (Win8 und höher) zu verbessern.

Die Getsockopt () -Konstanten "SO_DOMAIN", "SO_PROTOCOL", "SO_PEERSEC" und "und SO_PASSSEC" werden jetzt unterstützt.

Die Adressfamilie AF_ALG wird jetzt unterstützt und die Crypto-API des Linux-Kernels ist jetzt verfügbar.

socketserver Server, die auf dem Socketserver-Modul basieren (wie in "http.server", "xmlrpc.server" und "wsgiref.simple_server" definiert), unterstützen jetzt das Kontextmanagerprotokoll.

Implementierung der beschreibbaren Schnittstelle, bei der das Attribut "wfile" der Klasse "StreamRequestHandler" "io.BufferedIOBase" lautet. Insbesondere wird jetzt garantiert, dass "write ()" alle Daten sendet.

ssl ssl unterstützt jetzt OpenSSL 1.1.0. Die empfohlene Version ist 1.0.2 oder höher, wurde jedoch auch mit 0.9.8zc, 0.9.8zh, 1.0.1t und LibreSSL 2.3, 2.4 getestet.

3DES wurde aus der Standard-Verschlüsselungssuite entfernt. Außerdem ist die Crypto-Suite ChaCha20 Poly1305 jetzt am richtigen Ort.

Die Standardkonfiguration von SSLContext verwendet jetzt bessere Optionen und Chiffren.

SSL-Sitzungen können jetzt mit SSLSession von der Client-Seite auf die andere Seite kopiert werden. Verbesserte Geschwindigkeit für die Wiederaufnahme von TLS-Sitzungen.

Alle Konstanten und Flags wurden von IntEnum in IntFlags geändert.

Nur serverseitige und nur clientseitige Protokolle wurden als Parameter hinzugefügt, die beim Erstellen eines SSLContext übergeben werden sollen.

Die Eingabe der allgemeinen Ressourcen-ID in den Betreff-Alias-Erweiterungsbereich führt nicht mehr zu einem Systemfehler.

subprocess Ein untergeordneter Prozess, der mit "subprocess.Popen" erstellt wurde, löst jetzt eine "ResourceWarning" -Ausnahme aus, wenn versucht wird, ein Popen-Objekt zu löschen, während es ausgeführt wird.

telnetlib Telnet implementiert das Kontextmanagerprotokoll.

tkinter Die Methode trace_add () trace_remove () trace_info () wurde zur Klasse tkinter.Variable hinzugefügt, um die Implementierung zu ersetzen, die die alte Tcl-API verwendet hat.

traceback Lange Traceback-Wiederholungen werden jetzt weggelassen. Wenn Sie beispielsweise eine Selbstschleifenfunktion ausführen, sieht diese folgendermaßen aus.

>>> def f(): f()
...
>>> f()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 1, in f
  File "<stdin>", line 1, in f
  File "<stdin>", line 1, in f
  [Previous line repeated 995 more times]
RecursionError: maximum recursion depth exceeded

typing Die Klasse typing.ContextManager für contextlib.AbstractContextManager wurde hinzugefügt (wie oben erwähnt).

unicodedata Die interne Datenbank wurde auf Unicode 9.0.0 aktualisiert.

unittest.mock Mock.assert_called () und Mock.assert_called_once () wurden der Mock-Klasse hinzugefügt, damit Sie sehen können, ob ein Scheinobjekt aufgerufen wurde.

urllib.request Wenn die HTTP-Anforderung eine Datei oder einen wiederholbaren Text enthält (mit Ausnahme von Byteobjekten), der Header für die Inhaltslänge jedoch nicht angegeben ist, war dies früher ein Fehler, sollte jedoch mit Chunked-Übertragungscodierung gesendet werden. Wurde.

urllib.robotparser "RobotFileParser" unterstützt jetzt die Erweiterungen "Crawl-Delay" und "Request-Rate". Diese werden in robots.txt verwendet, um das Crawling-Intervall anzupassen. --Crawl-Verzögerung: Wartezeit (Sekunden), bevor mit dem Crawlen begonnen wird --Anforderungsrate: Anzahl der Seiten, die innerhalb eines bestimmten Zeitraums angefordert werden können

warnings Der Parameter "source" wurde der Funktion "warnings.warn_explicit ()" hinzugefügt, um das Objekt anzuzeigen, das die "ResourceWarning" verursacht hat. Das Attribut "source" wurde auch zu "warnings.WarningMessage" hinzugefügt.

Wenn ResourceWarning hochgefahren wird, wird tracemalloc verwendet, und es ist jetzt möglich, den Speicher des zu löschenden Objekts zurückzuverfolgen. Ein solches Beispiel wird gegeben.

example.py


import warnings

def func():
    return open(__file__)

f = func()
f = None

Die Datei wird in der Funktion func geöffnet und unmittelbar danach wird der Verweis auf das Dateiobjekt mit NULL überschrieben, um es auszuschneiden. Wenn Sie dies tun, sieht es so aus.

$ python -Wd -X tracemalloc=5 example.py
example.py:7: ResourceWarning: unclosed file <_io.TextIOWrapper name='example.py' mode='r' encoding='UTF-8'>
  f = None
Object allocated at (most recent call first):
  File "example.py", lineno 4
    return open(__file__)
  File "example.py", lineno 6
    f = func()

winreg Das winreg-Modul, das die Registrierung in der Windows-Umgebung bearbeitet, unterstützt jetzt den 64-Bit-Integer-Typ REG_QWORD.

winsound Sie können jetzt Schlüsselwortargumente mit Beep, MessageBeep und PlaySound übergeben.

xmlrpc.client Unterstützt neue numerische Typen und das Nicht-Marshalling von "None" in der Apache XML-RPC-Implementierung

zipfile Eine Klassenmethode namens "ZipInfo.from_file ()" wurde hinzugefügt, mit der Sie ein ZipInfo-Objekt erstellen können, indem Sie einen Dateinamen angeben, und die Methode "ZipInfo.is_dir ()", um zu überprüfen, ob es sich um ein Verzeichnis handelt. Es war. Und ZipFile.open () kann jetzt nicht nur zum Abrufen von Daten aus ZIP-Dateien, sondern auch zum Schreiben in diese verwendet werden.

zlib Die Funktion "compress ()" kann jetzt "level" als Schlüsselwortargument angeben.

fileinput Mit hook_encoded () können Sie jetzt nicht nur die beim Öffnen einer Datei verwendete Codierung angeben, sondern auch den Fehlerbehandler. Weitere Informationen finden Sie im Parameter error von open ().

Optimierung

Build- und C-API-Änderungen

Kandidat für die Abschaffung

Veraltete Build-Optionen

Die Option "--with-system-ffi" ist standardmäßig auf anderen Plattformen als OSX aktiviert. Es kann mit --without-system-ffi deaktiviert werden, aber die Verwendung dieses Flags ist seit Python 3.7 nicht mehr möglich. OSX ist von dieser Änderung nicht betroffen.

Neue Schlüsselwörter

Die Verwendung von "async" und "await" als Variablennamen, Klassennamen, Funktionsnamen und Modulnamen ist veraltet. In Python 3.5 von PEP-492 eingeführt, sind "async" und "await" offizielle Schlüsselwörter in Python 3.7.

Veraltete Python-Module, Funktionen, Methoden

--importlib.machinery.SourceFileLoader.load_module () importlib.machinery.SourcelessFileLoader.load_module () ist veraltet.

Veraltete C-API-Funktionen und -Typen

Veraltete Funktionen

Veraltetes Python-Verhalten

--Deprecation Warning wird jetzt ausgelöst, wenn Stop Iteration im Generator ausgelöst wird. Ab 3.7 ist dies ein Laufzeitfehler.

gelöscht

API- und Feature-Entfernung

--inspect.getmoduleinfo () wurde entfernt. Verwenden Sie inspect.getmodulename (), um den Modulnamen für einen Pfad herauszufinden.

Bei der Portierung auf Python 3.6

Beachten Sie beim Portieren Ihres Codes nach Python 3.6 einige Dinge.

Verhalten von Python-Befehlen

--COUNT_ALLOCS`` SHOW_ALLOC_COUNT SHOW_TRACK_COUNT Python-Ausgabe, die durch Definieren von Makros erstellt wurde, ist standardmäßig deaktiviert. Um dies zu aktivieren, fügen Sie dem Argument -X showalloccount hinzu und starten Sie Python. Außerdem wurde das Ausgabeziel von stdout in stderr geändert.

Änderungen an der Python-API

C API-Änderungen

--PyMem_Malloc () Die Speicherzuordnung verwendet jetzt Pymalloc anstelle von System-Maloc, sodass Apps, diePyMem_Malloc ()aufrufen, ohne eine GIL zu verwenden, abstürzen. Sie können die Speicherzuordnung überprüfen, indem Sie die Umgebungsvariable PYTHONMALLOC auf debug setzen. --Py_Exit () (und der Hauptinterpreter) geben jetzt 120 zurück, wenn die Speicherfreigabe beim Beenden fehlschlägt.

Schließlich

Ich wollte einen kurzen Blick auf die Änderungen werfen, aber als ich sie betrachtete, kamen verschiedene interessante Punkte heraus und es dauerte länger als erwartet. Ab sofort gibt es per Definition keine weitere Änderung in b1, daher habe ich "(α3-Version)" aus dem Titel gestrichen. Das Finale von 3.6 ist für Mitte Dezember geplant, daher kann es zu Änderungen kommen, aber ich werde es entsprechend aktualisieren.

Recommended Posts

Was ist neu in Python 3.5?
Was ist neu in Python 3.6?
Was ist neu in Python 3.10 (Zusammenfassung)
Neu in Python 3.4.0 (2) --enum
Was ist neu in Python 3.9 (Zusammenfassung)
Neu in Python3.9 Wörterbücher zusammenführen
Neu in Python 3.4.0 (1) --pathlib
Python in der Optimierung
CURL in Python
Metaprogrammierung mit Python
Python 3.3 mit Anaconda
Geokodierung in Python
Metaanalyse in Python
Unittest in Python
Epoche in Python
Zwietracht in Python
Deutsch in Python
DCI in Python
Quicksort in Python
nCr in Python
N-Gramm in Python
Programmieren mit Python
Plink in Python
Konstante in Python
FizzBuzz in Python
Schritt AIC in Python
CSV in Python
Reverse Assembler mit Python
Reflexion in Python
Konstante in Python
nCr in Python.
Format in Python
Scons in Python 3
Puyopuyo in Python
Python in Virtualenv
PPAP in Python
Quad-Tree in Python
Chemie mit Python
Hashbar in Python
DirectLiNGAM in Python
LiNGAM in Python
In Python reduzieren
In Python flach drücken
Was ist neu in Python 3.9 (2) -Sortierte nicht verteilte Diagramme in Python
Neu in Django 1.8 Bedingte Ausdrücke #djangoja
Neue Funktionen in Python 3.4.0 (3) - Generische Funktionen für den Einzelversand
Was in datetime neu ist, ist in Python 3 etwas nützlicher
Täglicher AtCoder # 36 mit Python
Clustertext in Python
Täglicher AtCoder # 32 in Python
Täglicher AtCoder # 6 in Python
Täglicher AtCoder # 18 in Python
Bearbeiten Sie Schriftarten in Python
Singleton-Muster in Python
Dateioperationen in Python
Lesen Sie DXF mit Python
Täglicher AtCoder # 53 in Python