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.
2016.07.16
2016.10.01
PEP-498, PEP-515 und PEP-526 werden unter "Neue Funktionen" ausführlicher erwähnt.
hashlib
und ssl
Module unterstützen OpenSSL 1.1.0 --ssl
Standardeinstellungen und Funktionsumfang sind sicherer -- hashlib
Modul hat neue Hash-Funktionen (BLAKE2, SHA-3, SHAKE) ) Und die Schlüsselableitungsfunktion "scrypt ()" werden unterstützt. Verbesserung unter Windows --PEP529 (https://www.python.org/dev/peps/pep-0529/) Ändern Sie die Windows-Dateisystemcodierung in UTF-8 - PEP528 (https://www.python.org/dev/peps/pep-0528/) Die Windows-Konsolencodierung wurde in UTF-8 geändertpython.exe
und pythonw.exe
unterstützen jetzt lange Pfade, wodurch die Beschränkung auf 260 Zeichen für Dateipfade aufgehoben wird.--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
Sie können jetzt "1000000000000000" als "1_000_000_000_000_000" schreiben. Es ist nur "_" für die Lesbarkeit, ohne semantische Änderungen.
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.
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.
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.
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.
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.
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.
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.
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
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.
Klassenattribute werden im Attribut __dict __
der Klasse in der Reihenfolge beibehalten, in der sie im Quellcode erscheinen.
Funktionsschlüsselwortargumente werden in einer beibehaltenen Reihenfolge an ** kwargs
übergeben.
Einführung einer Version, die nur aktualisiert wird, wenn Änderungen an Wörterbuchobjekten vorgenommen werden. Dadurch können verschiedene Optimierungen (Leistungsverbesserungen) durchgeführt werden.
dict ()
verwendet jetzt die von PyPy abgeleitete kompakte Darstellung, die 20-25% weniger Speicher benötigt als Pythono 3.5. Die Reihenfolge der Schlüsselwortargumente in PEP-468 wird damit implementiert. Andererseits ist die Eigenschaft, dass "Ordnung erhalten bleibt", implementierungsabhängig und kann sich in Zukunft ändern. Daher sollte die Implementierung nicht auf dieser Annahme basieren.
Lange Traceback-Wiederholungen werden jetzt weggelassen
--Now gibt ModuleNotFoundError
zurück, wenn import
das Modul nicht finden kann
(Keine bis jetzt)
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.
sure_future ()
und die Funktionen, die sie verwenden, können jetzt alle Arten von wartenden Objekten als Argumente angeben.loop.create_future ()
wurde hinzugefügt, damit Sie zukünftige Objekte erstellen können. Dies ermöglicht eine alternative Implementierung der Ereignisschleife und kann eine schnellere asynchrone Zukunft ermöglichen.loop.get_exception_handler ()
wurde hinzugefügt, um den aktuellen Ausnahmebehandler abzurufen.
--timeout ()
Der Kontextmanager erleichtert das Anwenden von Timeout-Verarbeitungscode.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.
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 "
>>> 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 "
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 ()
.
bytes.fromhex ()
undbytearray.fromhex ()
sind jetzt 2 bis 3,5 mal schneller.
--bytes.replace (b '', b '.')
Undbytearray.replace (b '', b '.')
Sind bis zu 80% schneller.
--PyMem_Malloc () verwendet jetzt pymalloc anstelle von malloc in der C-Bibliothek für die Zuweisung des Domänenspeichers. pymalloc ist für kurzlebige Objekte mit 512 Byte oder weniger optimiert, und malloc wird zum Zuweisen größerer Blöcke verwendet.
--pickle.load ()
undpickle.loads ()
sind jetzt bis zu 10% schneller, wenn eine große Anzahl kleiner Objekte geladen wird.PyArg_ParseTupleAndKeywords ()
unterstützt jetzt nur Positionsargumente.
--PyTrackback_Print
wird jetzt ohne lange Wiederholungen angezeigt.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.
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.
--importlib.machinery.SourceFileLoader.load_module () importlib.machinery.SourcelessFileLoader.load_module () ist veraltet.
pyvenv
Skript wird veraltet sein. Stattdessen wird die Spezifikation python3 -m venv
empfohlen
--ImportWarning-Ausnahme tritt jetzt auf, wenn beim relativen Import nicht "spec" oder "package" definiert ist.--Deprecation Warning wird jetzt ausgelöst, wenn Stop Iteration im Generator ausgelöst wird. Ab 3.7 ist dies ein Laufzeitfehler.
--inspect.getmoduleinfo ()
wurde entfernt. Verwenden Sie inspect.getmodulename ()
, um den Modulnamen für einen Pfad herauszufinden.
traceback.Ignore
und traceback.usage`` traceback.modname`` traceback.fullmodname
traceback.find_lines_from_code`` traceback.find_lines`` traceback.find_strings`` traceback.find_executable_lines
werden aus dem Traceback-Modul entfernt. Es war. Dies sind veraltete Kandidaten aus Version 3.2, und ähnliche Funktionen werden durch private Methoden bereitgestellt.
--tk_menuBar () `` tk_bindForTraversal ()
Die Dummy-Methode wurde aus der tkinter-Widget-Klasse entfernt.open ()
-Methode der zipfile.ZipFile
-Klasse hat die Unterstützung für den 'U'-Modus entfernt. Verwenden Sie alternativ "io.TextIOWrapper", um die komprimierte Datei zu lesen.Beachten Sie beim Portieren Ihres Codes nach Python 3.6 einige Dinge.
--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.
--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.
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