funkybob é uma biblioteca Python para gerar nomes aleatórios no estilo Docker, como estes:
ecstatic_ritchie, kind_beaver, sharp_heisenberg, angry_nightingale, ...
funkybob suporta a geração de nomes precedidos por um número arbitrário de adjetivos, a fim de aumentar o número de nomes exclusivos que podem ser gerados:
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, ...
Ao usar mais de um adjetivo, funkybob garante que dois nomes com o mesmo conjunto de adjetivos não possam ocorrer, mesmo que a ordem seja diferente. Assim, por exemplo, se o nome inspiring_stupefied_payne
foi gerado, você pode ter certeza de que o nome stupefied_inspiring_payne
não será gerado posteriormente. Isso torna os nomes muito mais fáceis de distinguir e menos propensos a gerar confusão.
O pacote está hospedado no PyPI, para instalar use:
$ pip install funkybob
funkybob fornece três geradores de nomes diferentes:
SimpleNameGenerator : fornece uma sequência determinística de nomes - sem aleatoriedade envolvida. Isso retornará nomes duplicados assim que todas as combinações forem geradas. Útil se tudo o que importa é o desempenho.
RandomNameGenerator : retorna nomes gerados aleatoriamente. Pode retornar nomes duplicados a qualquer momento.
UniqueRandomNameGenerator : retorna nomes gerados aleatoriamente, mas diferentemente de RandomNameGenerator, nenhuma duplicata é retornada. Ao contrário dos outros dois geradores, este tem um tamanho limitado e irá parar de produzir valores assim que todos os nomes exclusivos forem retornados.
Esta tabela resume os recursos de todos os três geradores:
Gerador | Infinito | Aleatório | Duplicatas |
---|---|---|---|
Gerador de Nome Simples | Sim | Não | Sim |
Gerador de nomes aleatórios | Sim | Sim | Sim |
Gerador de NomeAleatório Único | Não | Sim | Não |
Todos os três geradores são iteráveis, o que significa que você pode simplesmente usar iter()
e next()
neles para recuperar nomes:
>> > import funkybob
>> > generator = funkybob . RandomNameGenerator ()
>> > it = iter ( generator )
>> > next ( it )
'practical_hoover'
>> > next ( it )
'stupefied_ramanujan'
>> > next ( it )
'zealous_aryabhata'
Você pode passar os parâmetros members
e separator
para alterar o número de adjetivos ou a formatação dos nomes:
>> > # 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'
Os geradores possuem um atributo unique_count
que você pode usar para verificar o número de nomes exclusivos que podem ser gerados:
>> > generator . unique_count
740094
Além de tudo isso, UniqueRandomNameGenerator oferece uma interface semelhante a uma sequência, o que significa, por exemplo, que você pode usar indexação ou o método len()
(que é o mesmo que acessar o atributo unique_count
):
>> > generator = funkybob . UniqueRandomNameGenerator ()
>> > generator [ 0 ]
'xenodochial_yalow'
>> > generator [ 1 ]
'kind_mccarthy'
>> > generator [ 2 ]
'happy_hawking'
>> > len ( generator )
16089
Você pode aumentar o número de members
para aumentar o tamanho, em detrimento de nomes mais longos.
UniqueRandomNameGenerator também oferece suporte a um parâmetro adicional: seed
. Isso pode ser usado para inicializar o gerador pseudo-aleatório. Se passar sempre o mesmo valor, será gerada a mesma sequência de nomes. Isso pode ser útil em testes quando você precisar de nomes previsíveis.