2009-10-22 6 views
5

http://docs.python.org/3.0/whatsnew/3.0.html dit qu'il énumère ce qui est nouveau, mais à mon avis, il ne répertorie que différences, a donc quelqu'un sait de tout complètement nouvelles fonctionnalités Python, introduites dans 3.x version?Quoi de neuf dans Python 3.x?

Pour éviter la confusion, je vais définir une toute nouvelle fonctionnalité comme quelque chose qui n'a jamais été utilisé dans un autre code auparavant, en allant jusqu'à "Ooh, brillant!". Par exemple. une fonction permettant aux extraterrestres d'envahir, etc.

+3

comment définiriez-vous * complètement nouvelle * fonctionnalité? – SilentGhost

+0

Je viens d'ajouter un peu, merci de le signaler. – Joe

+0

Vote pour fermer aussi large. –

Répondre

4

La section New Syntax répertorie, bien, la nouvelle syntaxe dans Python 3.x. Je pense qu'il est parfois discutable que les choses soient nouvelles ou modifiées. Par exemple. exception chaining (PEP 3134): est-ce une nouvelle fonctionnalité, ou s'agit-il d'un changement à la machinerie d'exception?

En général, je recommande de regarder tous les PEP répertoriés dans le document. Ce sont les principaux changements/nouvelles fonctionnalités.

9

La plupart des nouvelles fonctionnalités introduites dans la version 3.0 ont également été rétroportées en 2.6, un choix délibéré. Cependant, ce n'était pas pratique dans tous les cas, donc certaines des nouvelles fonctionnalités sont restées sur Python 3 seulement. Le fonctionnement des métaclasses est probablement la plus grande nouveauté de tous les temps. La syntaxe est nettement meilleure que la cession de __metaclass__2.* ...:

class X(abase, metaclass=Y): 

mais plus important encore, la nouvelle syntaxe signifie que le compilateur connaît le métaclasse à utiliser avant de traiter le corps de la classe, et donc le métaclasse peut enfin influencer la façon dont le corps de la classe est traité - ce n'était pas possible dans 2.*. Plus précisément, la nouvelle méthode __prepare__ de la métaclasse peut renvoyer tout mappage en écriture, et si c'est le cas, elle est utilisée à la place d'une dict régulière pour enregistrer les affectations (et affecter des mots clés tels que def) dans le corps de la classe. En particulier, cela permet au ordre du corps de la classe d'être préservé exactement comme il est écrit, tout en permettant à la métaclasse, si elle le souhaite, d'enregistrer plusieurs affectations/définitions pour n'importe quel nom dans le corps de classe, plutôt que juste la dernière affectation ou définition effectuée pour ce nom. Cela élargit énormément l'applicabilité des classes avec des métaclasses personnalisées appropriées, par rapport à ce qui était réalisable en 2.*.

Une autre syntaxe biggie est annotations - voir le PEP que je pointe vers les détails. La bibliothèque standard de Python ne donne aucune sémantique spéciale aux annotations, mais précisément parce que les frameworks tiers et les outils sont habilités à appliquer toute la sémantique qu'ils souhaitent - des tâches telles que la vérification de type pour les arguments de fonction sont autorisées, bien qu'elles ne soient pas directement effectuées par bibliothèque Python standard.

Il y a bien sûr beaucoup d'autres (la nouvelle « vue » concept incarné par des méthodes telles que .keys de dict & c dans 3.*, uniquement des mots clés arguments, meilleure séquence déballer, nonlocal pour les fermetures plus puissants, ...), de variant le poids, mais tous très utile et bien conçu.

Questions connexes