IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

Vous êtes nouveau sur Developpez.com ? Créez votre compte ou connectez-vous afin de pouvoir participer !

Vous devez avoir un compte Developpez.com et être connecté pour pouvoir participer aux discussions.

Vous n'avez pas encore de compte Developpez.com ? Créez-en un en quelques instants, c'est entièrement gratuit !

Si vous disposez déjà d'un compte et qu'il est bien activé, connectez-vous à l'aide du formulaire ci-dessous.

Identifiez-vous
Identifiant
Mot de passe
Mot de passe oublié ?
Créer un compte

L'inscription est gratuite et ne vous prendra que quelques instants !

Je m'inscris !

Python 3.11 améliorera l'emplacement des erreurs dans les tracebacks,
Et apporte de nouvelles fonctionnalités

Le , par Bruno

109PARTAGES

15  0 
L'équipe de développement de Python a annoncé le 4 octobre les améliorations et les nouvelles fonctionnalités de la version 3.11 de Python. Cette version améliore la localisation des erreurs dans les logs et optimise le formatage de style C avec un format littéral ne contenant que les codes de format %s, %r et %. Les compréhensions asynchrones sont maintenant autorisées à l'intérieur des compréhensions dans les fonctions asynchrones. Les compréhensions externes deviennent implicitement asynchrones.

Python est un langage de programmation interprété, multi-paradigme et multi-plateformes. Il favorise la programmation impérative structurée, fonctionnelle et orientée objet. Il est doté d'un typage dynamique fort, d'une gestion automatique de la mémoire par ramasse-miettes et d'un système de gestion d'exceptions ; il est ainsi similaire à Perl, Ruby, Scheme, Smalltalk et Tcl.


Le langage Python est placé sous une licence libre proche de la licence BSD et fonctionne sur la plupart des plateformes informatiques, des smartphones aux ordinateurs, de Windows à Unix avec notamment GNU/Linux en passant par macOS, ou encore Android, iOS, et peut aussi être traduit en Java ou .NET. Il est conçu pour optimiser la productivité des programmeurs en offrant des outils de haut niveau et une syntaxe simple à utiliser. Voici, ci-dessous, quelques nouveautés apportées par la version 3.11 de Python.

Amélioration de la localisation des erreurs dans les logs

Lors de l'impression des traces, l'interpréteur pointe désormais vers l'expression exacte qui a causé l'erreur au lieu de la ligne. Par exemple :

Code : Sélectionner tout
1
2
3
4
5
6
7
8
Traceback (most recent call last):
  File "distance.py", line 11, in <module>
    print(manhattan_distance(p1, p2))
          ^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "distance.py", line 6, in manhattan_distance
    return abs(point_1.x - point_2.x) + abs(point_1.y - point_2.y)
                           ^^^^^^^^^
AttributeError: 'NoneType' object has no attribute 'x'
Les versions précédentes de l'interpréteur ne pointaient que sur la ligne, ce qui rendait ambiguë la question de savoir quel objet était None. Ces erreurs améliorées peuvent également être utiles lorsqu'il s'agit d'objets de dictionnaire profondément imbriqués et d'appels de fonction multiples,

Code : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Traceback (most recent call last):
  File "query.py", line 37, in <module>
    magic_arithmetic('foo')
    ^^^^^^^^^^^^^^^^^^^^^^^
  File "query.py", line 18, in magic_arithmetic
    return add_counts(x) / 25
           ^^^^^^^^^^^^^
  File "query.py", line 24, in add_counts
    return 25 + query_user(user1) + query_user(user2)
                ^^^^^^^^^^^^^^^^^
  File "query.py", line 32, in query_user
    return 1 + query_count(db, response['a']['b']['c']['user'], retry=True)
                               ~~~~~~~~~~~~~~~~~~^^^^^
TypeError: 'NoneType' object is not subscriptable

Modules améliorés

maths

  • ajout de math.cbrt() : retourne la racine cubique de x ;
  • le comportement de deux cas particuliers de math.pow() a été modifié, par souci de cohérence avec la spécification IEEE 754. Les opérations math.pow(0.0, -math.inf) et math.pow(-0.0, -math.inf) retournent maintenant inf. Auparavant, elles indiquaient ValueError.

opérateur
Une nouvelle fonction operator.call a été ajoutée, telle que operator.call(obj, *args, **kwargs) == obj(*args, **kwargs).

Système d’exploitation

Sous Windows, os.urandom() utilise maintenant BCryptGenRandom(), au lieu de CryptGenRandom() qui est déprécié.

sqlite3

  • il est maintenant possible de désactiver l'authorizer en passant None à set_authorizer() ;
  • le nom de collation create_collation() peut maintenant contenir n'importe quel caractère Unicode. Les noms de collation avec des caractères non valides indiquent maintenant UnicodeEncodeError au lieu de sqlite3.ProgrammingError ;
  • les exceptions sqlite3 incluent maintenant le code d'erreur SQLite comme sqlite_errorcode et le nom de l'erreur SQLite comme sqlite_errorname.

threading

  • Sous Unix, si la fonction sem_clockwait() est disponible dans la bibliothèque C (glibc 2.30 et plus récent), la méthode threading.Lock.acquire() utilise maintenant l'horloge monotonique (time.CLOCK_MONOTONIC) pour le délai d'attente, plutôt que d'utiliser l'horloge système (time.CLOCK_REALTIME), pour ne pas être affecté par les changements d'horloge système ;
  • Sous Unix, time.sleep() utilise désormais la fonction clock_nanosleep() ou nanosleep(), si elle est disponible, qui a une résolution de 1 nanoseconde (10-9 secondes), plutôt que d'utiliser select() qui a une résolution de 1 microseconde (10-6 secondes) ;
  • Sous Windows, time.sleep() utilise désormais un timer waitable dont la résolution est de 100 nanosecondes (10-7 secondes). Auparavant, il avait une résolution de 1 milliseconde (10-3 secondes).

Portage vers Python 3.11

Les anciennes macros (Py_TRASHCAN_SAFE_BEGIN/Py_TRASHCAN_SAFE_END) sont désormais obsolètes. Elles doivent être remplacées par les nouvelles macros Py_TRASHCAN_BEGIN et Py_TRASHCAN_END.
Les anciennes macros, telles que :

Code : Sélectionner tout
1
2
3
4
5
6
7
8
static void
mytype_dealloc(mytype *p)
{
    PyObject_GC_UnTrack(p);
    Py_TRASHCAN_SAFE_BEGIN(p);
    ...
    Py_TRASHCAN_SAFE_END
}
doivent migrer vers les nouvelles macros comme suit :

Code : Sélectionner tout
1
2
3
4
5
6
7
8
static void
mytype_dealloc(mytype *p)
{
    PyObject_GC_UnTrack(p);
    Py_TRASHCAN_BEGIN(p, mytype_dealloc)
    ...
    Py_TRASHCAN_END
}
Optimisations

  • le compilateur optimise maintenant le formatage simple de style C avec un format littéral contenant seulement les codes de format %s, %r et %a et le rend aussi rapide que l'expression f-string correspondante ;
  • les exceptions "à coût zéro" sont implémentées. Le coût des instructions try est pratiquement éliminé lorsqu'aucune exception n'est levée ;
  • les appels de méthodes avec des mots-clés sont maintenant plus rapides grâce à des modifications du bytecode qui évitent de créer des instances de méthodes liées. Auparavant, cette optimisation n'était appliquée qu'aux appels de méthodes avec des arguments purement positionnels.

Source : Python

Et vous ?

Quel est votre avis sur le sujet ?

Quel amélioration vous intéresse le plus ?

Voir aussi :

Django 3.1 est disponible, compatible avec Python 3.6, 3.7 et 3.8 et introduit JSONField pour tous les backends de base de données supportés

La version 3.2 du framework Django est disponible, avec la découverte automatique d'AppConfig, elle apporte de nouveaux décorateurs pour le module d'administration

Django 2.0 est disponible en version stable, quelles sont les nouveautés dans cette version du framework Web écrit en Python ?

JetBrains soutient Django : bénéficiez d'une remise de 30 % pour l'achat d'une licence individuelle PyCharm Professional et l'intégralité des sommes perçues seront reversées à la Fondation Django

Une erreur dans cette actualité ? Signalez-nous-la !

Avatar de archqt
Membre émérite https://www.developpez.com
Le 29/10/2022 à 15:01
Le C++ a une syntaxe moche ? autant les templates à la création cela peut être effectivement compliqué, mais cela est réservé pour les cas complexes aux experts, autant pour le reste je ne trouve pas cela moche
4  0 
Avatar de HaryRoseAndMac
Membre extrêmement actif https://www.developpez.com
Le 31/10/2022 à 0:15
Citation Envoyé par archqt Voir le message
Le C++ a une syntaxe moche ? autant les templates à la création cela peut être effectivement compliqué, mais cela est réservé pour les cas complexes aux experts, autant pour le reste je ne trouve pas cela moche
De toute façon, dire qu'un langage est moche, quel qu'il soit c'est un peu débile ...
Le langage est secondaire dans tout les cas.

Il n'est là que pour permettre d'atteindre un but précis : donner vie à une idée.
Celui qui se masturbe sur le langage est clairement à des années lumières d'avoir compris le boulot de développeur.

Même si il est évident que certains sont plus adapté à des contextes et que donc, la règle numéro une dans ce métier c'est "ça dépend", même là, s'attacher à ça n'est pas se concentrer sur les bonnes choses.

Les seuls à être convaincu de l'inverse de ce que je viens d'écrire, ce sont les mecs formés à l'arrache en six mois, ultra spécialisé qui ne connaissent rien au code et qui se rendrons compte dans 5 ans qu'ils étaient sur la mauvaise route depuis le départ.
4  1 
Avatar de jvallois
Membre éprouvé https://www.developpez.com
Le 04/10/2021 à 23:18
Citation Envoyé par wiztricks Voir le message
Une version beta-test n'est pas "disponible" et même la version 3.10 n'est pas encore sortie "officiellement" (toujours en tests). A ce stade, il n'est pas exclu que certaines fonctionnalités annoncées soient retirées, quelques mineures ajoutées,...
Tout à fait d'accord, sauf pour un point : la 3.10 est disponible depuis aujourd'hui : https://www.python.org/downloads/
2  0 
Avatar de wiztricks
Expert éminent sénior https://www.developpez.com
Le 05/10/2021 à 6:46
Citation Envoyé par jvallois Voir le message
Tout à fait d'accord, sauf pour un point : la 3.10 est disponible depuis aujourd'hui : https://www.python.org/downloads/
Quand j'ai regardé hier, elle ne l'était pas encore.

- W
2  0 
Avatar de electroremy
Membre expérimenté https://www.developpez.com
Le 21/11/2022 à 14:38
La performance des langages n'est pas seulement accessoire

Un bon langage qui permet de faire plus facilement du code compact et rapide permet :
- d'économiser de l'énergie
- d'utiliser un système avec moins de RAM, moins de ROM et un CPU plus lent ce qui éviter de remplacer son matériel

Un langage à la fois lent et populaire est une catastrophe pour la planète et nos portemonnaies.

Bien sûr, il y a le rôle du programmeur qui doit optimiser son code.

Exemple : sur Arduino, j'ai optimisé deux bibliothèques pour faire "rentrer" le code de mon projet dans les 32ko de rom (client TCP IP + écran LCD graphique + dalle tactile + capteurs). Non seulement ça marche mais en plus mes fonctions sont à la fois plus complète et sont 8 à 13 fois plus rapide que le code d'origine.
Mais ça demandé pas mal de travail...
...et surtout mon code n'est plus "portables" sur les autres cartes à microcontrôleur
...normal, on ne peut pas tout avoir

Quand on voit ce que demande en RAM et en CPU les versions actuelles de Word et Excel, alors qu'on ne fait pas grand chose de plus avec que les versions de 1997...

Mon premier ordinateur était un Amiga 1200, CPU 68020 à 14Mhz, 2Mo de RAM, j'étais impressionné par ce qu'arrivait à en tirer les programmeurs de l'époque, notamment sur des jeux dignes de bornes d'arcade, des applications graphiques et musicales.

S'agissant de la syntaxe et du confort, ça ne dépend pas que du langage mais aussi de l'IDE.
Un langage "facile" peut être performant : si par exemple les premières versions de Visual Basic étaient lentes, la version VB.NET permet de faire du code aussi rapide qu'en C#
2  0 
Avatar de wiztricks
Expert éminent sénior https://www.developpez.com
Le 04/10/2021 à 23:04
Salut,

Citation Envoyé par Bruno Voir le message

Et vous ?

Quel est votre avis sur le sujet ?
Une version beta-test n'est pas "disponible" et même la version 3.10 n'est pas encore sortie "officiellement" (toujours en tests). A ce stade, il n'est pas exclu que certaines fonctionnalités annoncées soient retirées, quelques mineures ajoutées,...

Et en l'état, seuls les développeurs qui ont le temps (et des environnements) pour faire des tests de non-régression ou très intéressés par quelques unes des nouvelles fonctionnalités vont y passer du temps.

- W
1  0 
Avatar de leopard78
Candidat au Club https://www.developpez.com
Le 07/11/2022 à 14:15
Si tu code moche en C++ c’est ton problème &#128556; pas les autres !
1  0 
Avatar de fred1599
Expert éminent https://www.developpez.com
Le 16/11/2022 à 8:04
Bonjour,

Dire qu'un langage est moche est très souvent subjectif et un avis de ce type ne concerne que soit. On lui demande le sien, il le donne... ce n'est pas pour ça que le contredire lui fera changer d'avis sur le C++ ou tout ceux qui sont d'accord avec lui.

La version 3.11 est sans doute améliorée, ce n'est pas pour autant que j'ai choisi ce langage, et ce n'est pas non plus pour cela que des développeurs se mettront à apprendre ce langage.

Même si c'est plus rapide, ça ne le sera pas suffisamment face à des langages compilés et autant dire que c'est souvent à cette comparaison (langages interprétés - compilés) que l'on fait référence.

Par contre cette amélioration peut être intéressante et faire la différence sur des langages comme ruby, R et surtout celui qui commence à faire de l'ombre... julia.

julia étant connu pour être bien plus performant et spécialisé pour des travaux scientifiques, on peut être amené à choisir l'un ou l'autre, et cette version 3.11 équilibre les forces côté performances.
1  0 
Avatar de orfraie
Membre régulier https://www.developpez.com
Le 06/10/2021 à 11:06
A+
0  0 
Avatar de shenron666
Expert confirmé https://www.developpez.com
Le 07/11/2022 à 20:51
Le binaire compilé en C++ s'exécute en seulement 1,8 fois moins de temps que le code javascript.
Mon premier avis est que je doute que le code C++ soit correctement écrit.
En plus, comparer des temps d'exécution de cet ordre (moins d'une seconde) manque de précision.

Dire que C++ a une syntaxe moche est plus que ridicule vu que la beauté c'est subjectif, et la beauté d'un code c'est... encore plus subjectif.
Perso je préfère le C# mais jamais je n'irai dire que c'est plus beau ou moins moche qu'un autre langage.
0  0