batbelt – Sam & Max http://sametmax.com Du code, du cul Wed, 30 Oct 2019 15:34:04 +0000 en-US hourly 1 https://wordpress.org/?v=4.9.7 32490438 Minibelt, la petite soeur de batbelt http://sametmax.com/minibelt-la-petite-soeur-de-batbelt/ http://sametmax.com/minibelt-la-petite-soeur-de-batbelt/#comments Mon, 21 Oct 2013 10:54:01 +0000 http://sametmax.com/?p=7494 qui tient dans UN fichier, et qui contient uniquement les fonctions qu'on utilise le plus souvent.]]> Quand j’ai créé batbelt, j’ai voulu en faire une boîte à outils pour des trucs pratiques qu’on ne trouve pas dans la lib standard, et qui n’ont pas de thèmes particuliers. Une genre de collection de snippets que j’utiliserais pour tous mes gros projets.

Mais voilà, il y a des choses qu’on utilise souvent, et d’autres moins. Et certaines personnes ne veulent pas installer un package complet avec plusieurs modules juste pour quelques fonctions. Surtout que tous les projets ne sont pas des gros projets.

C’est pourquoi j’ai créé minibelt.

C’est un subset de batbelt qui tient dans UN fichier, et qui contient uniquement les fonctions qu’on utilise le plus souvent. Vous pouvez bien sûr l’installer avec pip, mais le plus simple, c’est de juste copier / coller le fichier et le mettre à côté de votre code, puis de l’oublier.

L’autre bonne nouvelle, c’est que puisqu’il y a moins de code, je me suis bougé le cul pour rendre minibelt compatible Python 2 et Python 3 (enfin je crois :-)). Le README contient aussi l’ensemble de la documentation nécessaire.

Peut être même qu’un jour de pluie, j’ajouterai des tests unitaires, soyons fou.

Enjoy.

]]>
http://sametmax.com/minibelt-la-petite-soeur-de-batbelt/feed/ 3 7494
FIRST ! http://sametmax.com/first/ http://sametmax.com/first/#comments Thu, 01 Aug 2013 23:04:27 +0000 http://sametmax.com/?p=6991 array. Et puis, changeant d'avis par flemme, j'ouvre le code de batbelt, et je cherche un petit snippet que je n'ai pas présenté.]]> Cherchant un post pas trop long à faire car j’ai été malade comme un chien depuis hier, je m’étais chauffé pour faire une intro au module array. Et puis, changeant d’avis par flemme, j’ouvre le code de batbelt, et je cherche un petit snippet que je n’ai pas présenté.

Bonne pêche !

Voici des fonctions qui s’utilisent sur des itérables, n’importe lequel, même un dont la taille est inconnu ou infini. La première retourne le premier élément, et, si l’itérable est vide, elle retourne une valeur par défaut :

def first(iterable, default=None):
    for x in iterable:
        return x
    return default

C’est une sorte de [0], mais valable pour tous les itérables, par juste les indexables comme les tuples, les strings ou les listes. Et en prime, pas besoin de faire un try / catch dessus puisqu’il permet une valeur par défaut :

>>> first([0, 1, 2, 3])
0
>>> first([], 'flammkuchen')
'flammkuchen'

Le second est aussi sympathique, il fait la même chose, mais retourne l’élément seulement si il est vrai :

def first_true(iterable, key=lambda x: x, default=None):
    for x in iterable:
        if key(x):
            return x
    return default

key fonctionne comme pour la fonction sorted(), à savoir que c’est une injection de dépendance. C’est cette fonction qui va déterminer si l’élément est vrai ou non. Par défaut la fonction retourne l’élément tel quel, et le fait qu’il soit vrai ou non sera donc déterminé par son contexte booléen :

>>> first_true([0, 1, 2, 3])
1
>>> first_true([(0, 1), (2, 3)])
(0, 1)
>>> first_true([(0, 1), (2, 3)], lambda x: x[0])
(2, 3)
>>> first_true([], lambda x: x[0], 'socca')
u'socca'

Ce petit article m’a fait réaliser qu’on pourrait sans problème fusionner les deux en faisant :

def first(iterable, key=lambda x: True, default=None):
    for x in iterable:
        if key(x):
            return x
    return default

Mais j’ai pas la foi de faire un commit ce soir, donc fuck.

]]>
http://sametmax.com/first/feed/ 9 6991