7 mai 2010 à 14:23

Tester le type ou la classe

utiliser la fonction isinstance(object, class)

9 avril 2010 à 13:00

Convertir une sequence d’entiers en chaine et inversement

Voici deux fonctions permettant de convertir une séquence d’entiers en chaine, séparés par des virgules, et inversement.

1
2
3
4
def csv_to_integers(value):
    """>>> string_to_integers('1,2,3,4,5')
    [1,2,3,4,5]"""

    return [int(i) for i in value.split(u',')]
1
2
3
4
def sequence_to_csv(value):
    """>>> sequence_to_csv([1,2,3,4,5])
    u'1,2,3,4,5'"""

    return u','.join([unicode(i) for i in value])
7 avril 2010 à 10:15

Obtenir aléatoirement une instance de modèle

1
MyModel.objects.order_by('?')[0]

fonctionne mais utilise la clause SQL ORDER BY RAND() qui est très lente. Une meilleure solution, en deux lignes :

1
2
3
4
5
from random import randint
# @param class Model
def get_random_model(Model):
    qt = Model.objects.count()
    return Model.objects.all()[randint(0, qt-1)]

(solution par Björn Kempén)

7 avril 2010 à 09:22

Générer une chaîne aléatoire

1
2
3
4
5
6
7
8
9
import random, string

def random_string(length=None):
    # on définit les caractères acceptés
    chars = string.letters + string.digits
    # longueur de la chaine, paramètre défini ou entre 6  et 24
    length = length or random.randint(6,24)
    # une chaine concaténée a partir d'un choix aléatoire d'éléments
    return ''.join(random.sample(chars, length))
7 avril 2010 à 08:30

Définir une valeur par défaut

Pour un paramètre de fonction, on peut définir une valeur dans la signature :

1
2
3
# @param int var (36 by default)
def mafonction(var=36):
    pass

Si on a besoin d’une valeur calculée (un retour de fonction par exemple) on peut utiliser or :

1
2
# will set value if current value is None, False or empty sequence
var = var or mafonction()

Pour récupérer une valeur d’un dictionnaire ou une valeur par defaut si la clef n’y est pas définie :

1
2
# will set value to 36 if key isn't set
var = undico.get('var', 36)
6 avril 2010 à 19:37

Parcourir un dictionnaire

Les dictionnaires possèdent la méthode items() qui renvoie une paire clef, valeur.

1
2
for key, value in undico.items():
    print "%s = %s" % (key, value)
6 avril 2010 à 16:23

choix aléatoire d’un élément dans une séquence

1
2
3
4
import random

foo = ['a', 'b', 'c', 'd', 'e']
random_item =  random.choice(foo)