Простая задача: получить рандомную строку.
Такое может потребоваться для создания секретного ключа, токена, одноразовой ссылки и тд. Как бы вы решали такую задачу?
Допустим, требуется строка в 20 символов.
Чаще всего решают примерно так:
from string import ascii_letters, digits
from random import choice
token = ''.join(random.choice(string.ascii_letters+string.digits) for _ in range(20))
Редко, но встречается и такой способ
import uuid
token = str(uuid.uuid4())[:20]
Но самый верный способ это готовый модуль secrets (Python3.6+) из стандартной библиотеки.
import secrets
token = secrets.token_urlsafe(15)
или
token = secrets.token_hex(10)
Почему лучше?
- Короче запись
- Более читаемый и понятный код
- Быстрей работает ⏱
Время на 1М запусков:
- random+string : ~14.3sec
- uuid : ~5.5sec
- модуль secrets : ~1.2sec
________
Прошу не путать получение рандомной строки и получение контрольной суммы.
Это разные по назначению задачи.
#tricks