我一直在努力寻找一种在python中生成随机字符串的更具python风格的方法,而且还可以扩展。通常,我看到的内容类似于
''.join(random.choice(string.letters) for i in xrange(len))
如果你想生成长字符串,那就太糟糕了。
我已经考虑了一段时间的random.getrandombits,并弄清楚如何将其转换为位数组,然后对其进行十六进制编码。在使用python 2.6时,我遇到了bitarray对象,它没有文档。不知何故,我让它工作了,而且它看起来真的很快。
它会在3秒内在我的笔记本上生成一个50mil的随机字符串。
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]
编辑
heikogerlach指出,是奇数个字符导致了这个问题。添加了新的代码,以确保它始终从十六进制发送偶数个十六进制数字。
仍然很好奇是否有更好的方法来做这件事,而且速度也一样快。
https://stackoverflow.com/questions/785058
复制相似问题