我一直试图找到一种更加pythonic的方法来生成python中的随机字符串,它也可以扩展.通常情况下,我会看到类似的东西
''.join(random.choice(string.letters) for i in xrange(len))
Run Code Online (Sandbox Code Playgroud)
如果你想生成长字符串很糟糕.
我一直在考虑random.getrandombits一段时间,并想出如何将其转换为一个位数组,然后十六进制编码.使用python 2.6我遇到了bitarray对象,没有记录.不知何故,我让它工作,它似乎真的很快.
它在我的笔记本上生成一个50mil的随机字符串,仅需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]
Run Code Online (Sandbox Code Playgroud)
编辑
heikogerlach指出,造成这个问题的人数奇怪.添加了新代码以确保始终从偶数个十六进制数字发送.
仍然很好奇,如果有更好的方法做到这一点同样快.