Des chaînes aléatoires en Python 2.6 (Est-ce OK?)

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 semblable à

''.join(random.choice(string.letters) for i in xrange(len))

Il suce si vous voulez générer longue chaîne.

Que j'ai pensé au hasard.getrandombits pendant un certain temps, et de comprendre comment convertir un tableau de bits, puis en hexadécimal coder ça. À 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.

  • Comment puis-je faire de cette manière qu'il peut uniquement contenir des lettres, des chiffres et le trait de soulignement? (Ce qui comprend un tableau de bord)
  • for i in xrange(longueur))
InformationsquelleAutor mikelikespie | 2009-04-24