Quoi de neuf dans Python 3.6

introduction

Auparavant, j'ai écrit un article Quoi de neuf en Python 3.5, mais depuis la sortie de la version alpha de 3.6, je vais anticiper les fonctionnalités de 3.6. Je vais le vérifier.

Selon la feuille de route de développement (PEP-494)

--3.6.0 alpha 1: 2016-05-17 (Terminé) --3.6.0 alpha 2: 13/06/2016 (Terminé) --3.6.0 alpha 3: 11/07/2016 (Terminé) --3.6.0 alpha 4: 2016-08-15 (Terminé) --3.6.0 beta 1: 2016-09-12 (Complété et ajouté de nouvelles fonctions jusqu'à ici)

La destination est encore longue. La version finale sortira le 16 décembre. Avant Noël. De nouvelles fonctionnalités continueront d'être ajoutées jusqu'à la version bêta de septembre, donc je pense que cela changera régulièrement d'ici là, mais je mettrai à jour cet article chaque fois qu'il y aura un changement. C'est plus facile que de tout voir en même temps (^^;

Donc, j'ai fait référence à 3.6.0b1 cette fois, et j'ai fait référence au projet de document de version de ici.

Utilisez pyenv pour essayer

pyenv install 3.6.0b1
pyenv local 3.6.0b1

S'il vous plaît.

Journal des modifications

2016.07.16

2016.10.01

Changements

Faits saillants de la version

Introduction d'une nouvelle grammaire

--global et nonlocal doivent être placés avant la première utilisation de la variable dans cette portée (auparavant uniquement des avertissements)

PEP-498, PEP-515 et PEP-526 sont mentionnés plus en détail dans "Nouvelles fonctionnalités".

Amélioration de la sécurité

--Sous Linux, os.urandom () se bloquera maintenant jusqu'à ce que le pool d'entropie urandom du système soit initialisé. Voir PEP524 (https://www.python.org/dev/peps/pep-0524/) pour une justification détaillée.

Améliorations sous Windows

--PEP529 (https://www.python.org/dev/peps/pep-0529/) Changement du codage du système de fichiers Windows en UTF-8 --PEP528 (https://www.python.org/dev/peps/pep-0528/) Changement de l'encodage de la console Windows en UTF-8

Nouvelle fonction intégrée

--PEP-520 (https://www.python.org/dev/peps/pep-0520/) Conserve l'ordre de définition des attributs de classe --PEP-468 (https://www.python.org/dev/peps/pep-0468/) Conserver l'ordre des arguments de mot-clé

nouvelle fonction

PEP-515 Vous pouvez maintenant mettre _ dans un littéral numérique

Vous pouvez maintenant écrire «1000000000000000» comme «1_000_000_000_000_000». C'est juste _ pour la lisibilité, sans changement sémantique.

PEP-523 Ajout de l'API d'évaluation de trame

L'évaluation des objets frame n'a pas pu être personnalisée jusqu'à présent, mais nous avons ajouté une API de niveau C pour le rendre possible. Cela semble faciliter la mise en œuvre de JIT et du débogueur.

PEP-519 Ajout du protocole de chemin du système de fichiers

Dans le passé, les chemins du système de fichiers étaient de type "str" ou "bytes", et les bibliothèques qui gèrent les chemins, y compris ceux du standard Python, étaient créées avec cette hypothèse. Cela rendait difficile l'utilisation d'une bibliothèque de représentation de chemin en combinaison avec une bibliothèque existante, telle que pathlib. ..

Pour résoudre ce problème, nous avons défini une interface (classe de base virtuelle) appelée ʻos.PathLike. L'objet qui représente le chemin en hérite, et en définissant une méthode appelée fspath ()` qui renvoie une représentation sous forme de chaîne du chemin, les autres bibliothèques le reconnaîtront comme le chemin et fonctionneront. C'était.

PEP-498 Chaîne littérale formatée

Préfixez la chaîne avec «f» pour en faire une chaîne formatée. Similaire au format str.format, mais la partie délimitée par «{» et «}» est remplacée en tant que variable. Par exemple, comme ça.

>>> name = "Monty Python"
>>> f"mon nom est{name}est"
'Je m'appelle Monty Python'

C'est à ce moment que str.format est utilisé

>>> "mon nom est{name}est".format(name=name)

Ou

>>> "mon nom est{}est".format(name)

Je devais le faire, donc cela semble un peu plus facile à décrire.

PEP-526 Introduction de la notation pour annoter les variables

Python est un langage typé dynamiquement sans typage explicite, mais il a le problème qu'il est difficile d'effectuer une analyse statique. Afin de résoudre ce problème, PEP-484 (https://www.python.org/dev/peps/pep-0484/) a proposé une méthode d'ajout d'informations de type à l'argument de la fonction, et en Python 3.5 Introduit.

Cette modification a été étendue pour permettre aux variables (y compris les variables de classe et les variables d'instance) d'avoir des informations de type. Dans le passé, il était possible de faire de même en utilisant des commentaires, mais la différence est que cela était géré en modifiant la grammaire. Par exemple, comme ça.

from typing import List, Dict
 
primes: List[int] = [] #Un exemple de type de liste d'entiers, l'initialisation avec une liste vide

captain: str  #Type de chaîne. Exemple de non initialisation

class Starship:
    stats: Dict[str, int] = {} #Exemple de variables de classe. Type de dictionnaire qui prend une chaîne de caractères comme clé et un entier comme valeur

Notez que cette annotation de type ne change pas le comportement et que l'attribution d'une valeur d'un type différent ne provoque pas d'erreur. Il s'agit simplement d'un "indice" pour les informations de type, et est destiné à une analyse statique basée sur ces informations.

PEP-529 Changement du codage du système de fichiers Windows en UTF-8

Dans le passé, lors du passage de chemins à l'aide d'octets sous Windows, une perte de données pouvait se produire. À partir de Python 3.6, même si vous utilisez Bytes, il sera encodé et renvoyé avec l'encodage par défaut du système. Le codage par défaut est UTF-8 jusqu'à présent, mais il peut éventuellement changer en fonction des commentaires pendant la période bêta.

PEP-487 Personnalisation facile de la génération de classe

Lorsqu'une classe est héritée, une méthode de classe appelée __init_subclass__ (cls) sera appelée. Vous pouvez y écrire du code personnalisé. De plus, lors de l'initialisation de l'objet descripteur, une méthode appelée «set_name» sera appelée.

PEP-528 Changement du codage de la console Windows en UTF-8

Il accepte désormais tous les caractères Unicode et peut être lu correctement dans un objet str. Et le codage par défaut de sys.stdin, sys.stdout, sys.stderr est UTF-8.

Variable d'environnement PYTHONMALLOC

En entrant une valeur dans une variable d'environnement appelée PYTHONMALLOC, vous pouvez modifier le comportement de l'allocation de mémoire de Python ou définir un hook pour le débogage.

PYTHONMALLOC=debug Avec ce paramètre, les fonctions de débogage suivantes sont activées.

PYTHONMALLOC=malloc Ce paramètre force l'utilisation de malloc de la bibliothèque C. Cela vous permet d'utiliser des outils externes tels que Valgrind.

PYTHONMALLOC=malloc_debug Combinaison des deux ci-dessus

Prise en charge de DTrace et système tap

Lors de la compilation avec --with-dtrace, les marqueurs qui détectent les événements suivants sont activés.

Cette fonctionnalité vous permet de déboguer et de profiler Python sans avoir à le recompiler pour le débogage.

PEP-520 Préservation de l'ordre de définition des attributs de classe

Les attributs de classe sont conservés dans l'attribut «__dict __» de la classe dans l'ordre dans lequel ils apparaissent dans le code source.

PEP-468 Préservation de l'ordre des arguments des mots clés

Les arguments de mot-clé de la fonction sont passés à «** kwargs» dans un ordre préservé.

PEP-509 Introduction de la version interne de l'objet de type dictionnaire

Introduction d'une version mise à jour uniquement lorsque des modifications sont apportées aux objets du dictionnaire. En conséquence, diverses optimisations (améliorations des performances) peuvent être effectuées.

Autres changements de langue

--ʻImportrenvoie maintenantModuleNotFoundError` si le module est introuvable

Nouveau module

(Aucun pour l'instant)

Module amélioré

asyncio Comme asyncio est défini comme "provisoire", toutes les modifications seront également rétroportées vers 3.5.x.

Les principaux changements par rapport à la version 3.5.0 sont les suivants.

--ʻEnsure_future () `Les fonctions et fonctions qui les utilisent peuvent désormais spécifier toutes sortes d'objets attendus comme arguments.

Je n'ai pas beaucoup utilisé asyncio, mais j'ai essayé d'utiliser run_coroutine_threadsafe ().

asyncio_test.py


import asyncio

@asyncio.coroutine
def wakeup(name, repeat):
    for i in range(repeat):
        yield from asyncio.sleep(1)
        print("{}/{}:Se réveille!".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()

C'est un peu déroutant, mais le collout qui «réveille» s'exécute. Après avoir dormi pendant 1 seconde, imprimez simplement la ligne "Wake up!" Avec le nom donné par name. Répétez-le autant de fois que l'autre argument «répéter». La fonction appelée target exécute le collout et y appelle run_coroutine_threadsafe. Je l'exécute avec run_in_executor pour l'exécuter dans un thread séparé.

Le résultat de l'exécution devrait ressembler à ceci.

$ python asyncio_test.py
A/0:Se réveille!
B/0:Se réveille!
C/0:Se réveille!
B/1:Se réveille!
C/1:Se réveille!
C/2:Se réveille!

Comme mentionné ci-dessus, ce changement asyncio a été rétroporté sur la série 3.5, et il semble qu'il ait déjà été implémenté dans 3.5.1. En fait, l'exemple ci-dessus fonctionne très bien.

contextlib Contextlib.AbstractContextManager a été ajouté comme classe de base virtuelle pour les gestionnaires de contexte afin de fournir des implémentations par défaut pour __enter__ () ʻet exit ()`. Une classe similaire a également été ajoutée au module de saisie.

venv venv accepte maintenant le paramètre --prompt. Cela vous permet de modifier le préfixe de l'invite de ligne de commande dans un environnement virtuel.

datetime Les méthodes datetime.strftime () et date.strftime () prennent désormais en charge ISO 8601 % G,% u et % V. % G et% V représentent l'année et le numéro de la semaine (01-53) en notation hebdomadaire, et% u représente le numéro de la semaine (lundi est 1 et dimanche est 7).

distutils.command.sdist L'attribut default_format a été supprimé de distutils.command.sdist.sdist et l'attribut par défaut est maintenant ['gztar']. De manière inattendue, tout code qui dépend de cet attribut doit être corrigé.

email La nouvelle API de messagerie avec l'argument de stratégie ajouté n'est plus «provisoire» et la documentation a été réécrite autour d'elle. La documentation traditionnelle reste une API héritée.

Les classes ʻEmail.mime et DecodedGenerator` acceptent maintenant les arguments de politique.

Un attribut message_factory a été ajouté à l'objet de stratégie pour permettre à l'analyseur de spécifier la classe de message à utiliser lors de la génération d'un nouveau message.

encodings Ajout de 'oem' pour utiliser CP_OEMCP sur l'environnement Windows. De plus, un alias ʻansi a été ajouté à mbcsqui utiliseCP_ACP`.

faulthandler Installe désormais des gestionnaires qui déclenchent des exceptions Windows dans un environnement Windows.

hashlib hashlib prend désormais en charge OpenSSL 1.1.0. La version recommandée est 1.0.2 ou supérieure, mais elle a également été testée avec 0.9.8zc, 0.9.8zh, 1.0.1t et LibreSSL 2.3, 2.4.

Le support de la fonction de hachage BLAKE2 a été ajouté, et blake2b () et blake2s () sont maintenant disponibles.

Les fonctions de hachage SHA-3 sha3_224 (), sha3_256 (), sha3_384 (), sha3_512 () et SHAKE Les fonctions de hachage shake_128 (), shake_256 () ont été ajoutées.

Activé lorsque la fonction de dérivation de clé basée sur un mot de passe scrypt () est OpenSSL 1.1.0 ou supérieur.

http.client

HTTPConnection.request () et endheaders () prennent désormais en charge l'encodage fragmenté dans le corps de la requête.

idlelib et IDLE

Le package idlelib a été remanié de manière moderne pour améliorer l'apparence, l'opérabilité et la visibilité d'IDLE. Les modifications incluent la modification du nom de fichier et le code jusqu'à 3,5 ne fonctionnera pas tel quel.

importlib Puisque ʻimportlib.util.LazyLoader appelle maintenant create_module () ʻ sur le chargeur d'encapsuleur, ʻimportlib.machinery.BuiltinImporter et ʻimportlib.machinery.ExtensionFileLoader sont ensemble avec ʻimportlib.util.LazyLoader`. Il n'y a plus de restriction pour laquelle il ne peut pas être utilisé.

ʻImportlib.util.cache_from_source () , ʻimportlib.util.source_from_cache (), ʻimportlib.util.spec_from_file_location () `peuvent désormais recevoir des objets de type chemin.

json json.load () et json.loads () peuvent maintenant accepter des binaires comme entrée. Le JSON encodé doit être encodé en UTF-8, UTF-16 ou UTF-32.

os Une méthode close () a été fournie pour fermer explicitement l'itateur scandir (). Et l'itérateur scandir () prend désormais en charge le protocole du gestionnaire de contexte. Si l'itérateur scandir () n'est pas épuisé ou explicitement fermé, une exception ResourceWarning est déclenchée dans le destructeur. Je pense que c'est une contre-mesure de fuite de mémoire, mais si vous l'utilisez avec l'instruction with, elle sera appelée automatiquement.

L'appel système Linux getrandom () est maintenant disponible via la nouvelle fonction os.getrandm ().

pickle Vous pouvez maintenant saler (pickle) les objets qui devaient être appelés __new__ avec des arguments de mot-clé. Cela était possible avec la version 4 ou supérieure de pickle, mais avec ce changement, c'est désormais possible avec la version 3 ou inférieure.

re

Ajout de qualificatifs pour les expressions régulières. Par exemple, (? I: p) ython'` correspond à`'python'` et à Python' mais pas à'PYTHON'`. De même, (? I) g (? -I: v) r '' correspond à GvR '' et gvr '' mais pas à GVR ''.

readline set_auto_history () a été ajouté pour contrôler si oui ou non il est automatiquement ajouté à l'historique.

rlcompleter rlcompleter est une complétion de readline. Le premier changement consiste à supprimer les variables de module, les méthodes et les attributs commençant par un trait de soulignement ('_') de la liste des complétions. C'est difficile à comprendre, alors voici un exemple. Auparavant, lorsque je démarrais Python en mode interactif, tapais "int". Et puis appuyais deux fois sur la touche TAB, cela se produisait.

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

Ce sera comme ça à partir de la version 3.6.

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(

Les noms commençant par «» sont exclus des candidats à l'achèvement. Si vous voulez les voir, tapez «» puis « ».

>>> 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.__

Ensuite, après avoir complété certains mots-clés, un espace ('') ou un signe deux-points (':') a été ajouté. Par exemple, si vous tapez wi et appuyez sur <TAB>, il sera complété paravecavec un espace, et si vous tapez tr,<TAB>donneratry:. Pratique pour la sobriété.

De plus, on dit qu'il est devenu possible de compléter des attributs créés avec @ property qui n'ont pas été affichés jusqu'à présent, mais je n'en étais pas sûr.

site Je vérifie les doublons lors de l'ajout d'un chemin vers sys.path, mais cela semble être une solution si cela ne fonctionne pas.

sqlite3 sqlite3.Cursor.lastrowid renvoie l'ID de colonne de la dernière colonne modifiée, qui n'était valide que lorsque INSERT a été exécuté jusqu'à présent, mais maintenant il peut être obtenu lorsque REPLACE est exécuté.

socket Vous pouvez maintenant utiliser SIO_LOOPBACK_FAST_PATH avec la fonction ʻioctl ()` pour améliorer les performances de bouclage TCP dans les environnements Windows (Win8 et plus).

Les constantes getsockopt () «SO_DOMAIN», «SO_PROTOCOL», «SO_PEERSEC» et «et SO_PASSSEC» sont désormais prises en charge.

La famille d'adresses AF_ALG est désormais prise en charge et l'API Crypto du noyau Linux est désormais disponible.

socketserver Les serveurs basés sur le module socketserver (tel que défini dans http.server, xmlrpc.server et wsgiref.simple_server) supportent désormais le protocole du gestionnaire de contexte.

Implémentation de l'interface writable où l'attribut wfile de la classe StreamRequestHandler est ʻio.BufferedIOBase. En particulier, write ()` est maintenant garanti d'envoyer toutes les données.

ssl ssl prend désormais en charge OpenSSL 1.1.0. La version recommandée est 1.0.2 ou supérieure, mais elle a également été testée avec 0.9.8zc, 0.9.8zh, 1.0.1t et LibreSSL 2.3, 2.4.

3DES a été supprimé de la suite de chiffrement par défaut. De plus, la suite cryptographique ChaCha20 Poly1305 est maintenant au bon endroit.

La configuration par défaut de SSLContext utilise désormais de meilleures options et de meilleurs chiffrements.

Les sessions SSL peuvent désormais être copiées du côté client vers l'autre côté à l'aide de SSLSession. Amélioration de la vitesse de reprise des sessions TLS.

Toutes les constantes et tous les indicateurs ont été modifiés d'IntEnum en IntFlags.

Les protocoles côté serveur uniquement et côté client uniquement ont été ajoutés en tant que paramètres à transmettre lors de la création d'un SSLContext.

La saisie de l'ID de ressource générale dans la zone d'extension d'alias d'objet ne provoque plus d'erreur système.

subprocess Un processus enfant créé avec subprocess.Popen déclenche maintenant une exceptionResourceWarning lorsqu'il tente d'effacer un objet Popen pendant son exécution.

telnetlib Telnet implémente le protocole du gestionnaire de contexte.

tkinter Ajout de la méthode trace_add () trace_remove () trace_info () à la classe tkinter.Variable pour remplacer l'implémentation qui utilisait l'ancienne API Tcl.

traceback Les longues répétitions de trace sont désormais omises. Par exemple, si vous exécutez une fonction auto-bouclée, elle ressemblera à ceci.

>>> 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 Ajout de la classe typing.ContextManager pour contextlib.AbstractContextManager (comme mentionné ci-dessus).

unicodedata La base de données interne a été mise à niveau vers Unicode 9.0.0.

unittest.mock Mock.assert_called () et Mock.assert_called_once () ont été ajoutés à la classe Mock pour vous permettre de voir si un objet fictif a été appelé.

urllib.request Si la requête HTTP a un fichier ou un corps répétable (sauf pour les objets byte) mais que l'en-tête Content-length n'est pas spécifié, il s'agissait auparavant d'une erreur, mais désormais envoyée avec un codage de transfert Chunked. Devenu.

urllib.robotparser RobotFileParser prend désormais en charge les extensions Crawl-delay et Request-rate. Ceux-ci sont utilisés dans le fichier robots.txt pour ajuster l'intervalle d'exploration. --Crawl-delay: Temps (secondes) à attendre avant de commencer l'exploration --Request-rate: nombre de pages qui peuvent être demandées dans un certain laps de temps

warnings Le paramètre source a été ajouté à la fonction warnings.warn_explicit () pour afficher l'objet qui a provoqué le ResourceWarning. L'attribut source a également été ajouté à warnings.WarningMessage.

Ensuite, lorsque ResourceWarning monte, tracemalloc est utilisé, et il est maintenant possible de retracer la mémoire de l'objet à effacer. Un tel exemple est donné.

example.py


import warnings

def func():
    return open(__file__)

f = func()
f = None

Le fichier est ouvert dans la fonction func, et immédiatement après cela, la référence à l'objet fichier est écrasée par NULL pour le couper. Lorsque vous faites cela, cela ressemble à ceci.

$ 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 Le module winreg qui manipule le registre dans l'environnement Windows prend désormais en charge le type REG_QWORD d'entier 64 bits.

winsound Vous pouvez désormais transmettre des arguments de mot-clé avec Beep, MessageBeep et PlaySound.

xmlrpc.client Prend en charge les nouveaux types numériques et la suppression de `` None '' dans l'implémentation Apache XML-RPC

zipfile Une méthode de classe appelée ZipInfo.from_file () a été ajoutée pour vous permettre de créer un objet ZipInfo en spécifiant un nom de fichier, et la méthode ZipInfo.is_dir () peut être utilisée pour vérifier s'il s'agit d'un répertoire. C'était. Et ZipFile.open () peut maintenant être utilisé non seulement pour récupérer des données à partir de fichiers ZIP, mais aussi pour y écrire.

zlib La fonction compress () peut maintenant spécifier level comme argument de mot-clé.

fileinput Vous pouvez maintenant spécifier un gestionnaire d'erreurs ainsi que l'encodage utilisé lors de l'ouverture d'un fichier avec hook_encoded (). Voir le paramètre ʻerrorsdans ʻopen ()pour plus de détails.

optimisation

Modifications de la build et de l'API C

Candidat à l'abolition

Options de construction obsolètes

L'option --with-system-ffi est activée par défaut sur les plates-formes autres que OSX. Il peut être désactivé avec --without-system-ffi, mais l'utilisation de cet indicateur n'est plus possible depuis Python 3.7. OSX n'est pas affecté par ce changement.

Nouveaux mots clés

L'utilisation de ʻasync et ʻawait comme noms de variables, noms de classes, noms de fonctions et noms de modules est obsolète. Introduits dans Python 3.5 par PEP-492, ʻasync et ʻawait seront des mots-clés officiels dans Python 3.7.

Modules, fonctions, méthodes Python obsolètes

--importlib.machinery.SourceFileLoader.load_module () importlib.machinery.SourcelessFileLoader.load_module () est obsolète.

Fonctions et types de l'API C obsolètes

Fonctionnalités obsolètes

Comportement Python obsolète

supprimé

Suppression d'API et de fonctionnalités

--ʻInspect.getmoduleinfo () a été supprimé. Utilisez ʻinspect.getmodulename () pour trouver le nom de module d'un chemin.

Lors du portage vers Python 3.6

Voici quelques éléments à garder à l'esprit lors du portage de votre code vers Python 3.6.

Comportement des commandes Python

--COUNT_ALLOCS`` SHOW_ALLOC_COUNT SHOW_TRACK_COUNT La sortie Python construite en définissant des macros est désactivée par défaut. Pour activer cela, ajoutez -X showalloccount à l'argument et démarrez Python. De plus, la destination de sortie est passée de stdout à stderr.

Modifications de l'API Python

Modifications de l'API C

--PyMem_Malloc () L'allocation de mémoire utilise maintenant pymalloc au lieu de system maloc, donc les applications qui appellentPyMem_Malloc ()sans prendre de GIL planteront. Vous pouvez vérifier l'allocation de mémoire en définissant la variable d'environnement PYTHONMALLOC sur debug. --Py_Exit () (et l'interpréteur principal) renvoie désormais 120 si la libération de mémoire à la sortie échoue.

finalement

J'allais jeter un rapide coup d'œil aux changements, mais au fur et à mesure que je les examinais, divers points intéressants sont ressortis et cela a pris plus de temps que prévu. Pour l'instant, il n'y a pas d'autre changement dans b1 par définition, j'ai donc supprimé "(version α3)" du titre. La finale de la version 3.6 est prévue pour la mi-décembre, il se peut donc qu'il y ait à nouveau des changements, mais je la mettrai à jour de temps en temps.

Recommended Posts

Quoi de neuf dans Python 3.5
Quoi de neuf dans Python 3.6
Nouveautés de Python 3.10 (Résumé)
Nouveau dans Python 3.4.0 (2) --enum
Nouveautés de Python 3.9 (Résumé)
Nouveau dans les dictionnaires de fusion python3.9
Nouveau dans Python 3.4.0 (1) --pathlib
Python en optimisation
CURL en Python
Métaprogrammation avec Python
Python 3.3 avec Anaconda
Géocodage en python
Méta-analyse en Python
Unittest en Python
Époque en Python
Discord en Python
Allemand en Python
DCI en Python
tri rapide en python
nCr en python
N-Gram en Python
Programmation avec Python
Plink en Python
Constante en Python
FizzBuzz en Python
Étape AIC en Python
CSV en Python
Assemblage inversé avec Python
Réflexion en Python
Constante en Python
nCr en Python.
format en python
Scons en Python 3
Puyopuyo en python
python dans virtualenv
PPAP en Python
Quad-tree en Python
Chimie avec Python
Hashable en Python
DirectLiNGAM en Python
LiNGAM en Python
Aplatir en Python
Aplatir en python
Nouveautés de Python 3.9 (2) - Tri des graphes non circulés dirigés en Python
Nouveau dans Django 1.8 Expressions conditionnelles #djangoja
Nouvelles fonctionnalités de Python 3.4.0 (3) - Fonctions génériques à distribution unique
Quoi de neuf dans datetime qui est un peu plus utile dans Python 3
AtCoder # 36 quotidien avec Python
Texte de cluster en Python
Daily AtCoder # 32 en Python
Daily AtCoder # 6 en Python
Daily AtCoder # 18 en Python
Modifier les polices en Python
Motif singleton en Python
Opérations sur les fichiers en Python
Lire DXF avec python
Daily AtCoder # 53 en Python