Daily Shaarli
May 19, 2014
Oooouh, je connaissais pas inspect.getsource, c'est génial. ^-^
Petit guide d'optimisation en Python.
Nice reading.
Ouuuuuh, y a des trucs vachement chouettes !
Comme "1.14 Grouping adjacent list items using zip", c'est brillant, utilisé plusieurs instances du même objet iter pour regrouper les éléments ensemble. <3 (Même si j'avoue que la deuxième méthode est ptet plus lisible :D )
Ou "1.30 Using default dictionaries to represent simple trees" : Miam !
Etc.
AttributeError: 'itertools.count' object has no attribute 'next'
Arf …
Le code suivant ne fonctionne donc plus en Python 3 :
import itertools, collections
value_to_numeric_map = collections.defaultdict(itertools.count().next)
value_to_numeric_map['a']
0
value_to_numeric_map['b']
1
value_to_numeric_map['c']
2
value_to_numeric_map['a']
0
value_to_numeric_map['b']
1
La première solution venant à l'esprit serait d'avoir à instancier une variable :
c = itertools.count()
value_to_numeric_map = collections.defaultdict(lambda a: next(c))
Et ça fonctionne très bien.
Mais personnellement, je préfère lorsque ça reste one-line, donc voici une alternative one-line :
J'utilise lambda pour créer une encapsulation (closure).
value_to_numeric_map = collections.defaultdict((lambda c: (lambda: next(c)))(itertools.count()))