funkybob — это библиотека Python для генерации случайных имен в стиле Docker, например:
ecstatic_ritchie, kind_beaver, sharp_heisenberg, angry_nightingale, ...
funkybob поддерживает генерацию имен, которым предшествует произвольное количество прилагательных, чтобы увеличить количество уникальных имен, которые можно сгенерировать:
Random names with no adjectives:
swirles, khorana, blackwell, ...
Random names preceeded by an adjective:
ecstatic_ritchie, kind_beaver, sharp_heisenberg, ...
Random names preceeded by two adjectives:
admiring_dazzling_noether, thirsty_wonderful_agnesi, silly_wizardly_feynman, ...
Random names preceeded by three adjectives:
cranky_goofy_hopeful_wright, competent_jolly_suspicious_kare, cocky_competent_gifted_yalow, ...
При использовании более одного прилагательного funkybob гарантирует, что два имени с одним и тем же набором прилагательных не могут встретиться, даже если их порядок разный. Так, например, если имя inspiring_stupefied_payne
было сгенерировано, то вы можете быть уверены, что имя stupefied_inspiring_payne
не будет сгенерировано позже. Это значительно облегчает различение имен и снижает вероятность возникновения путаницы.
Пакет размещен на PyPI, для установки используйте:
$ pip install funkybob
funkybob предлагает три разных генератора имен:
SimpleNameGenerator : обеспечивает детерминированную последовательность имен — без всякой случайности. Это вернет повторяющиеся имена после того, как будут получены все комбинации. Полезно, если вас волнует только производительность.
RandomNameGenerator : возвращает случайно сгенерированные имена. Он может вернуть повторяющиеся имена в любой момент.
UniqueRandomNameGenerator : возвращает случайно сгенерированные имена, но, в отличие от RandomNameGenerator, дубликаты не возвращаются. В отличие от двух других генераторов, этот имеет ограниченный размер и перестанет выдавать значения после того, как будут возвращены все уникальные имена.
В этой таблице обобщены характеристики всех трех генераторов:
Генератор | бесконечный | Случайный | Дубликаты |
---|---|---|---|
SimpleNameGenerator | Да | Нет | Да |
Генератор случайных имен | Да | Да | Да |
Генератор уникального случайного имени | Нет | Да | Нет |
Все три генератора являются итерируемыми, а это означает, что вы можете просто использовать для них iter()
и next()
чтобы получить имена:
>> > import funkybob
>> > generator = funkybob . RandomNameGenerator ()
>> > it = iter ( generator )
>> > next ( it )
'practical_hoover'
>> > next ( it )
'stupefied_ramanujan'
>> > next ( it )
'zealous_aryabhata'
Вы можете передать параметры- members
и separator
, чтобы изменить количество прилагательных или форматирование имен:
>> > # This will generate names with 3 members (2 adjectives + 1 last name),
>> > # separated by a colon
>> > generator = funkybob . RandomNameGenerator ( members = 3 , separator = ':' )
>> > it = iter ( generator )
>> > next ( it )
'friendly:hopeful:neumann'
>> > next ( it )
'admiring:trusting:montalcini'
>> > next ( it )
'practical:suspicious:blackwell'
Генераторы имеют атрибут unique_count
, который можно использовать для проверки количества уникальных имен, которые можно сгенерировать:
>> > generator . unique_count
740094
В дополнение ко всему вышеперечисленному, UniqueRandomNameGenerator предоставляет интерфейс, подобный последовательностям, что означает, например, что вы можете использовать индексацию или метод len()
(который аналогичен доступу к атрибуту unique_count
):
>> > generator = funkybob . UniqueRandomNameGenerator ()
>> > generator [ 0 ]
'xenodochial_yalow'
>> > generator [ 1 ]
'kind_mccarthy'
>> > generator [ 2 ]
'happy_hawking'
>> > len ( generator )
16089
Вы можете увеличить количество members
, чтобы увеличить размер за счет более длинных имен.
UniqueRandomNameGenerator также поддерживает дополнительный параметр: seed
. Это можно использовать для инициализации генератора псевдослучайных чисел. Если вы всегда передаете одно и то же значение, будет сгенерирована одна и та же последовательность имен. Это может быть полезно в тестах, когда вам нужны предсказуемые имена.