Les billets en vrac sont au blogging ce que les pâtes de fond de frigo sont à la cuisine: le dernier recours en cas de manque de ressources ou d’inspiration.
Mais bizarrement, c’est aussi quelque chose qui plait beaucoup. C’est d’ailleurs les posts que je préférais sur le standblog, ou les trucs qui énervaient sebsauvage avant qu’il shaarlise tout ça.
Bref, quelques trucs en Python qui peuvent être passés sous le radar.
Min et Max ont un param “key”
Si vous avez lu l’article sur le tri, vous savez que sorted()
et sort()
peuvent prendre une fonction de callback via l’argument key
, permettant de choisir comment extraire l’information qui va servir à déterminer la place de chaque élément.
min
et max
marchent de la même manière :
>>> scores = {"allemagne": 1,"montagne": 0} >>> scores.items() dict_items([('allemagne', 1), ('montagne', 0)]) >>> max(scores.items()) ('montagne', 0) >>> max(scores.items(), key=lambda x: x[1]) ('allemagne', 1) |
next
possède un second paramètre
Vous savez, sur les dicos, on peut choper une valeur par défaut si une clé n’existe pas :
>>> scores.get("allemagne") 1 >>> scores.get("kamoulox", 1j) 1j |
Mais ceci n’existe pas pour les listes. Je pensais que c’était un oubli, mais en fait c’est comblé par le deuxième argument de next
:
>>> l = list(range(1)) >>> l [0] >>> g = iter(l) >>> next(g, 1j) 0 >>> next(g, 1j) 1j |
__future__
n’est pas bullet proof
Certains comportements backportés en Python 2.7 ne peuvent pas être parfaitement implémentés. Ce sont “ce qu’on peut avoir de plus proche”. C’est déjà pas mal, et je les active tout le temps, mais ça peut vous rattraper à un moment inattendu.
Par exemple, les caractères d’échappements unicodes.
En Python 3:
>>> r"\u" '\\u' |
En Python 2.7, par contre, utiliser u
et r
entraine une exception :
>>> ur"\u" File "<stdin>", line 1 SyntaxError: (unicode error) 'rawunicodeescape' codec can't decode bytes in position 0-1: truncated \uXXXX |
Et donc si on active les littéraux unicodes (ce qui est une bonne pratique) :
>>> r"\u" File "<stdin>", line 1 SyntaxError: (unicode error) 'rawunicodeescape' codec can't decode bytes in position 0-1: truncated \uXXXX |
De quoi se gratter la tête sur des regexs ou des chemins de fichiers Windows.
“des chemins de fichiers Windows”
Les chemins Windows fonctionnent avec des slashs ou des backslashs depuis trèèèèèèèèès longtemps. ;-)
Oui, mais le copier/coller depuis le terminal demande de les remplacer à chaque fois, donc c’est pratique de juste balancer un ‘r’ et pouf.
Merci pour le post.
Dans l’exemple “next”, on peut virer: >>> g = list(range(1))
Première ligne: les pattes -> les pâtes (pour les Panzani) à moins que cela soit des pattes (de poulet ?). Je ne veux pas savoir ce qu’il y a dans ton frigo !
Merci, vigilant lecteur.
Je pensais que c’était la montagne qu’avait gagné.