Tester le type ou la classe
utiliser la fonction isinstance(object, class)
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]) |
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)] |
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)) |
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) |
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) |
1 2 3 4 | import random foo = ['a', 'b', 'c', 'd', 'e'] random_item = random.choice(foo) |