1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > python生成随机字符串包含数字字母_用大写字母和数字随机生成字符串

python生成随机字符串包含数字字母_用大写字母和数字随机生成字符串

时间:2020-10-15 13:44:27

相关推荐

python生成随机字符串包含数字字母_用大写字母和数字随机生成字符串

用一行回答:

''.join(random.choice(string.ascii_uppercase + string.digits) for _ in range(N))

甚至更短,从Python3.6开始使用random.choices():

''.join(random.choices(string.ascii_uppercase + string.digits, k=N))

密码学上更安全的版本;参见/a/23728630/2213647:

''.join(random.SystemRandom().choice(string.ascii_uppercase + string.digits) for _ in range(N))

详细地说,具有一个干净的函数以供进一步重用:

>>> import string

>>> import random

>>> def id_generator(size=6, chars=string.ascii_uppercase + string.digits):

... return ''.join(random.choice(chars) for _ in range(size))

...

>>> id_generator()

'G5G74W'

>>> id_generator(3, "6793YUIO")

'Y3U'

它是怎么工作的?

我们进口string,一个包含公共ASCII字符序列的模块,以及random一个处理随机生成的模块。

string.ascii_uppercase + string.digits只需连接表示大写ASCII字符和数字的字符列表:

>>> string.ascii_uppercase

'ABCDEFGHIJKLMNOPQRSTUVWXYZ'

>>> string.digits

'0123456789'

>>> string.ascii_uppercase + string.digits

'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'

然后,我们使用列表理解来创建一个‘n’元素列表:

>>> range(4) # range create a list of 'n' numbers

[0, 1, 2, 3]

>>> ['elem' for _ in range(4)] # we use range to create 4 times 'elem'

['elem', 'elem', 'elem', 'elem']

在上面的例子中,我们使用[来创建列表,但是我们没有在id_generator函数,这样Python就不会在内存中创建列表,而是一个接一个地生成元素(更多有关这方面的内容)。这里).

而不是要求创建‘n’次字符串elem,我们将要求Python创建‘n’次随机字符,从字符序列中选择:

>>> random.choice("abcde")

'a'

>>> random.choice("abcde")

'd'

>>> random.choice("abcde")

'b'

因此random.choice(chars) for _ in range(size)实际上是在创建一个size人物。随机挑选的字符chars:

>>> [random.choice('abcde') for _ in range(3)]

['a', 'b', 'b']

>>> [random.choice('abcde') for _ in range(3)]

['e', 'b', 'e']

>>> [random.choice('abcde') for _ in range(3)]

['d', 'a', 'c']

然后,我们用一个空字符串将它们连接起来,这样序列就变成了一个字符串:

>>> ''.join(['a', 'b', 'b'])

'abb'

>>> [random.choice('abcde') for _ in range(3)]

['d', 'c', 'b']

>>> ''.join(random.choice('abcde') for _ in range(3))

'dac'

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。