Мне нужно генерировать несколько буквенно-цифровых паролей в python. Возможны следующие способы:
import string
from random import sample, choice
chars = string.letters + string.digits
length = 8
''.join(sample(chars,length)) # way 1
''.join([choice(chars) for i in range(length)]) # way 2
Но мне это не нравится, потому что:
- способ 1 выбраны только уникальные символы, и вы не можете генерировать пароли, где длинa > len (chars)
- способ 2 у нас есть переменная
i
неиспользованная, и я не могу найти хороший способ избежать этого.
Итак, любые другие хорошие варианты?
P.S. Итак, мы тестируем с timeit
для 100000 итераций:
''.join(sample(chars,length)) # way 1; 2.5 seconds
''.join([choice(chars) for i in range(length)]) # way 2; 1.8 seconds (optimizer helps?)
''.join(choice(chars) for _ in range(length)) # way 3; 1.8 seconds
''.join(choice(chars) for _ in xrange(length)) # way 4; 1.73 seconds
''.join(map(lambda x: random.choice(chars), range(length))) # way 5; 2.27 seconds
Итак, победитель ''.join(choice(chars) for _ in xrange(length))
.