Próbowałem znaleźć bardziej pytonowy sposób generowania losowego ciągu znaków w pythonie, który również może skalować. Zazwyczaj widzę coś podobnego do tego, co jest w stanie wygenerować długi łańcuch.Losowe ciągi w Pythonie 2.6 (czy to jest w porządku?)
Myślałem przez chwilę o random.getrandombits i zastanawiałem się, jak przekonwertować to na tablicę bitów, a następnie zakodować je w szesnastkowy. Używając Pythona 2.6 natknąłem się na obiekt bitarray, który nie jest udokumentowany. Jakoś mi się to udało i wygląda na to, że jest naprawdę szybki.
Generuje losowy ciąg 50 mil na moim notesie w ciągu zaledwie 3 sekund.
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]
edit
heikogerlach podkreślić, że była nieparzysta liczba znaków powodujących problem. Dodano nowy kod, aby zawsze był wysyłany z heksadecymalnej liczby cyfr szesnastkowych.
Wciąż ciekawy, czy jest lepszy sposób robienia tego równie szybko.
Jak zrobić to tak, że będzie ona zawierać tylko cyfry, litery i podkreślać? (Zawiera myślnik) – wenbert
@wenbert '' .join (random.choice (string.letters + string.digits + "_") dla i w xrange (długość)) – yanjost