J’aime bien fouiner pour trouver des petits trucs insolites dans mes techos. Cet excellent post sur SO est un bon début, mais on découvre toujours de nouvelles choses.
ChainMap
Vous vous souvenez de ChainMap ? C’est top, mais uniquement en Python 3.
Et bien il existe une version cachée en Python 2 :
from ConfigParser import _Chainmap as ChainMap |
C’est pas aussi complet (il n’y a pas les méthodes new_child
et parents
), mais ça peut servir.
Si néanmoins, vous avez besoin de l’implémentation complète, il existe un backport installable avec pip :
pip install Py2ChainMap
str.startswith, str.endswith et un tuple
Pour beaucoup de situations, une regex en Python, c’est overkill. On a in
pour vérifier qu’une chaîne en contient une autre. Et on a str.startswith()
et str.endswith()
pour vérifier qu’une chaîne commence ou finit par une autre. Avec des strip()
/split()
/lower()
, on finit souvent par s’en sortir, et l’usage de toutes ces méthodes est en général plus performant que d’utiliser re
.
Mais si vous avez plusieurs chaînes à vérifier ? Pas de problème, str.startswith()
et str.endswith()
acceptent aussi des tuples :
>>> "Je suis une chaîne qui a du caractère".startswith('Tu') False >>> "Je suis une chaîne qui a du caractère".startswith('Je') True >>> "Je suis une chaîne qui a du caractère".startswith(('Tu', 'Je')) True >>> |
Les espaces entre une instance et son attribut sont ignorés
Bien que la deuxième ligne soit très moche, elle est parfaitement valide :
>>> "Yolo".upper() 'YOLO' >>> "Yolo" .upper() 'YOLO' |
Or on peut intercepter l’accès aux attributs à la volée en Python grâce aux méthodes magiques.
Ça veut dire qu’on peut implémenter des “symboles” en Python.
class SymbolMaker(): symbols = set() def __getattr__(self, value): symbols.add(value) >>> make_symbol = SymbolMaker() >>> make_symbol .start >>> make_symbol .end >>> SymbolMaker.symbols {'end', 'start'} |
Je n’ai pas dit qu’on devrait le faire, j’ai dit qu’on pouvait :) D’ailleurs, y en a qui l’utilisent pour implémenter GOTO
en Python. The troll is strong with this “feature”.
Merci pour cet article.
Correction : “on finit souvent pas s’en sortir” -> par à la place de pas.
Merci.
Excusez moi, mais les tags…
A Curious Course on Coroutines and Concurrency (http://www.dabeaz.com/coroutines)