J'ai essayé de trouver un plus pythonic moyen de génération aléatoire de la chaîne de caractères en python qui peut évoluer aussi bien. Généralement, je vois quelque chose de similaire à
''.join(random.choice(string.letters) for i in xrange(len))
Elle suce si vous voulez générer longue chaîne.
J'ai pensé au hasard.getrandombits pendant un certain temps, et de comprendre comment convertir un tableau de bits, puis en hexadécimal encoder. À l'aide de python 2.6, je suis tombé sur le bitarray objet, qui n'est pas documenté. En quelque sorte je l'ai eu à travailler, et il semble vraiment rapide.
Il génère un 50mil chaîne aléatoire sur mon portable en seulement 3 secondes environ.
def rand1(leng):
nbits = leng * 6 + 1
bits = random.getrandbits(nbits)
uc = u"%0x" % bits
newlen = int(len(uc) / 2) * 2 # we have to make the string an even length
ba = bytearray.fromhex(uc[:newlen])
return base64.urlsafe_b64encode(str(ba))[:leng]
modifier
heikogerlach a souligné que c'était un nombre impair de caractères à l'origine du problème. Nouveau code ajouté à assurez-vous toujours envoyé fromhex un même nombre de chiffres hexadécimaux.
Toujours curieux de savoir si il ya une meilleure façon de faire qui est tout aussi rapide.