Я пытался найти более питонический способ создания случайной строки в python, который также может масштабироваться. Обычно я вижу что-то похожее на
''.join(random.choice(string.letters) for i in xrange(len))
Отстойно, если вы хотите сгенерировать длинную строку.
Некоторое время я думал о random.getrandombits и выяснял, как преобразовать это в массив бит, а затем закодировать его в шестнадцатеричном формате. Используя python 2.6, я наткнулся на объект битового массива, который не задокументирован. Каким-то образом я заставил его работать, и это кажется очень быстрым.
Он генерирует на моем ноутбуке случайную строку размером 50 мил всего за 3 секунды.
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]
изменить
Хейкогерлах указал, что причиной проблемы было нечетное количество символов. Добавлен новый код, чтобы он всегда отправлял из шестнадцатеричного числа четное число шестнадцатеричных цифр.
По-прежнему любопытно, есть ли лучший способ сделать это так же быстро.