Created
March 3, 2016 02:43
-
-
Save hxer/9f03c978ad1fe8ccde26 to your computer and use it in GitHub Desktop.
python生成随机字符串
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import os | |
def randomString(n): | |
return (''.join(map(lambda xx:(hex(ord(xx))[2:]),os.urandom(n))))[0:16] | |
print randomString(16) | |
""" | |
os.urandom(n) : 随机生成n个字节的串,一个字节是8位,我猜是这8位二进制数是随机的,所以这个字节也是随机的。所以没有指定的编码方案可以很好地把所有这个字符串显示转换成功,即有可能会乱码 | |
再介绍一下map函数,它的第一个参数是一个函数(可以说是一个映射函数),第二个参数是一个元组或者列表(iterative),它将iterative的每个元素作为参数依次传入映射函数,将所有返回值分别作为元素,最后形成一个列表返回。 | |
ord(xx):以一个字符(python是一个字节也即8位),计算其unicode 码值的十进制表示,比如字符a,unicode code是0x0061,则ord('a')则返回97,因为十六进制的61等于十进制下的97 | |
hex(xx): 就是把十进制的数转换成十六进制串,比如hex(97)则变成 '0x61’. 这里我们不需要前面的‘0x',所以做切片[2:0] | |
最后拼接map返回的随机元素列表后就是一个随机的字符串了 | |
""" |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
def random_string(length=8): return ''.join(map(lambda x: hex(x)[2:], os.urandom(length // 2)))