Найти тему
Реальный Код

Пишем функцию генерации пароля на Python

Внимание! Данная функция не обеспечивает должной безопасности. Не рекомендуется использовать ее в реальных проектах для генерации паролей.

Сегодня разберем короткую и удобную функцию для генерации паролей, IDшников или рандомных имен файлов. Вы также можете использовать ее для своих нужд генерации случайных строк.

import random
import string
def gen_rand_str(length: int) -> str:
return ''.join(random.choice(string.ascii_letters + string.digits) for _ in range(0, length))

Разложим ее на составные части:

  • string.ascii_letters – не что иное, как константная строка, доступная в стандартной библиотеке Питона, и содержащая ASCII-символы в верхнем + нижнем регистрах
>>> string.ascii_letters
'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
  • string.digits – строка с цифрами
>>> string.digits
'0123456789'
  • вместе получаем
>>> string.ascii_letters + string.digits
'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'
  • random.choice() возвращает случайный элемент из списка, либо же случайный символ из строки
>>> random.choice('abcdef')
'c'
>>> random.choice('abcdef')
'e'
>>> random.choice('abcdef')
'd'
  • [<выражение> for _ in range(0, length)] – один из вариантов однострочного цикла for, когда мы пробегаем в цикле length раз и выполняем выражение, стоящее в начале; более того, результат этого выражения добавится в список, и так на каждой итерации цикла for; в итоге на выходе получится новый список; “по-научному” это называется list comprehension

Например, вот как можно получить список квадратов элементов исходного списка

>>> [I * i for i in range(0, 4)]
[0, 1, 4, 9]
>>> [i * i for i in l]
[0, 1, 9, 25]
  • в нашем случае значение текущего индекса цикла нам не требуется, поэтому вместо переменной (`i`, например) мы поставили `_`, что означает, что переменная цикла нам не требуется
  • '<разделитель>'.join(<список>) формирует строку из элементов списка с разделителем, указанным в начале
>>> ‘ + '.join(['1', '2', '3', '4'])
'1 + 2 + 3 + 4'

Результаты выполнения получившейся функции:

>>> gen_rand_str(4)
'9h8S'
>>> gen_rand_str(4)
'dtMF'
>>> gen_rand_str(8)
'8Udtmpao'
>>> gen_rand_str(8)
'fHmPrwlF'
>>> gen_rand_str(12)
'tl5OSVV6odTq'
>>> gen_rand_str(12)
'JL1qNlzRywMS'

#junior #python #разбор_кода #random