Quelques innovation de Python 3 backportées en Python 2.7
lundi 5 novembre 2012 à 12:36Comme nous l’avons vu avec les vues ou les collections, Python 2.7 vient avec pas mal de bonus issus directement de la branche 3. En voici quelques autres. Tout ceci n’est bien sûr ni nouveau ni exhaustif, mais je m’aperçois que peu de personnes le savent.
Une notation littérale pour les sets:
>>> {1, 2} == set((1, 2)) True
Une syntaxe pour les dictionnaires en intention:
>>> d = {chr(x): x for x in range(65, 91)} >>> d {'A': 65, 'C': 67, 'B': 66, 'E': 69, 'D': 68, 'G': 71, 'F': 70, 'I': 73, 'H': 72, 'K': 75, 'J': 74, 'M': 77, 'L': 76, 'O': 79, 'N': 78, 'Q': 81, 'P': 80, 'S': 83, 'R': 82, 'U': 85, 'T': 84, 'W': 87, 'V': 86, 'Y': 89, 'X': 88, 'Z': 90}
Imbriquer with
:
Avant il fallait utiliser nested() ou imbriquer à la main
with open('fichiera') as a: with open('fichiera') as b: # faire un truc
Maintenant on peut faire:
with open('fichiera') as a, open('fichiera') as b: # faire un truc
Rien à voir, mais toujours sympa. timedelta
a maintenant une méthode total_seconds()
qui retourne la valeur de la durée en seconde. En effet, l’attribut seconds
ne retourne que ce qui reste en seconde une fois qu’on a retiré les jours:
>>> from datetime import timedelta >>> delta = timedelta(days=1, seconds=1) >>> delta.seconds 1 >>> delta.total_seconds() 86401.0
Notez qu’il n’y a toujours ni attribut minutes, ni heures.
Le module unittest
gagne une pléthore d’améliorations, et notamment:
L’utilisation de assertRaises
comme context manager:
with self.assertRaises(KeyError): {}['foo']
Et un bon gros nombres de méthodes:
assertIsNone()
/ assertIsNotNone()
, assertIs()
/ assertIsNot()
, assertIsInstance()
/ assertNotIsInstance()
, assertGreater()
/ assertGreaterEqual()
/ assertLess()
/ assertLessEqual()
, assertRegexpMatches()
/ assertNotRegexpMatches()
, assertRaisesRegexp()
,
assertIn()
/ assertNotIn()
, assertDictContainsSubset()
, assertAlmostEqual()
/ assertNotAlmostEqual()
.
Enfin format()
commence à devenir une alternative valable à %
car il propose maintenant des marqueurs sans noter d’index:
>>> "{}, puis {} et finalement {}".format(*range(3)) '0, puis 1 et finalement 2'
Et il ajoute le séparateur des milliers au mini-langage de formatage, mais pour la virgule uniquement. Par exemple, si avoir un nombre de 15 caractères minimum formater en tant que float, avec deux chiffres après la virgules, et donc les milliers sont groupés à l’américaine:
>>> '{:15,.2f}'.format(54321) ' 54,321.00'