Quels sont les problèmes que les nouvelles fonctionnalités de python 3 résolvent? [fermé]

18

Les nouvelles fonctionnalités de Python 3 disent:

nous réparons principalement des désagréments et des verrues bien connus, et nous supprimons beaucoup d'anciennes cruches

Il mentionne ce qui est différent (la solution) mais pas pourquoi (les problèmes). Je n'ai pas trouvé quels étaient les problèmes. Quels étaient les problèmes résolus par les correctifs?

user712092
la source
1
Une verrue cependant, qu'ils n'ont pas supprimée, est la raison pour laquelle il faut passer "soi" à une méthode de classe. Échec du train.
Rig

Réponses:

11

Je vais juste nommer ceux qui me viennent immédiatement à l'esprit.

  • Arguments relatifs aux mots clés uniquement: décrits dans la justification du PEP.
  • nonlocal: Sans cela, les fermetures ne peuvent pas écraser les variables fermées. Ce besoin se pose de temps en temps avec les décorateurs et d'autres fonctions d'ordre supérieur. La seule solution de contournement raisonnable (sans changer l'API externe), stockant tout état mutable que vous souhaitez dans un objet mutable, est excessivement laide.
  • Compréhensions des dictionnaires et des ensembles: la création de dictionnaires et d'ensembles d'une manière similaire aux compréhensions de listes est moins jolie et légèrement plus lente lorsqu'elle est effectuée via des compréhensions de générateur. Il nous permet d'utiliser ces types là où ils sont appropriés, sans frais supplémentaires. Idem pour les littéraux définis, en particulier pour les intests (à partir de Python 3.2, ceux-ci sont également optimisés par l'optimiseur de judas).
  • Les littéraux octaux existaient en Python 2, mais la 0777notation est un piège pour ceux qui n'y sont pas habitués (dans d'autres contextes, l'ajout d'un zéro à gauche ne change ni la valeur ni la base).
  • Les littéraux binaires sont utiles pour jouer du bit, même plus que les littéraux hexadécimaux.
  • Les littéraux d'octet sont un symptôme de la distinction forcée entre les chaînes unicode et les chaînes d'octets, et les littéraux de chaîne étant unicode. Ces changements vous obligent à penser à la différence entre le texte et les données binaires non interprétées et aux encodages. Cela est important car sinon, vous avez besoin de tests approfondis (avec des entrées nous parlant anglais, les fous centrés sur l'Europe / l'Amérique) pour trouver des erreurs liées au codage.
  • except ex, var-> except ex as varcorrige l'erreur commune except ValueError, IndexError(devrait intercepter les deux, mais n'attrape que le premier et écrase le nom IndexErroravec l'exception interceptée).
  • Étendue de la compréhension de la liste: évitez de polluer les espaces de noms et laissez-les penser en termes d'expressions de générateur.
  • Suppression de la syntaxe et des modules: rapprochez-vous de "Il devrait y avoir un - et de préférence un seul - moyen évident de le faire." et évite aux personnes ayant des tutoriels médiocres de s'en tenir à la manière ancienne et éclatée de réparer les choses.

la source