funkybob es una biblioteca de Python para generar nombres aleatorios estilo Docker, como estos:
ecstatic_ritchie, kind_beaver, sharp_heisenberg, angry_nightingale, ...
funkybob admite la generación de nombres precedidos por una cantidad arbitraria de adjetivos, para aumentar la cantidad de nombres únicos que se pueden generar:
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, ...
Cuando se utiliza más de un adjetivo, funkybob garantiza que no puedan aparecer dos nombres con el mismo conjunto de adjetivos, incluso si el orden es diferente. Entonces, por ejemplo, si se generó el nombre inspiring_stupefied_payne
, entonces puedes estar seguro de que el nombre stupefied_inspiring_payne
no se generará más adelante. Esto hace que los nombres sean mucho más fáciles de distinguir y menos propensos a generar confusión.
El paquete está alojado en PyPI, para instalarlo utilice:
$ pip install funkybob
funkybob ofrece tres generadores de nombres diferentes:
SimpleNameGenerator : proporciona una secuencia determinista de nombres, sin aleatoriedad. Esto devolverá nombres duplicados una vez que se hayan obtenido todas las combinaciones. Útil si lo único que te importa es el rendimiento.
RandomNameGenerator : devuelve nombres generados aleatoriamente. Puede devolver nombres duplicados en cualquier momento.
UniqueRandomNameGenerator : devuelve nombres generados aleatoriamente, pero a diferencia de RandomNameGenerator, no se devuelven duplicados. A diferencia de los otros dos generadores, este tiene un tamaño limitado y dejará de generar valores una vez que se hayan devuelto todos los nombres únicos.
Esta tabla resume las características de los tres generadores:
Generador | Infinito | Aleatorio | Duplicados |
---|---|---|---|
Generador de nombres simples | Sí | No | Sí |
Generador de nombres aleatorios | Sí | Sí | Sí |
Generador de nombres aleatorios únicos | No | Sí | No |
Los tres generadores son iterables, lo que significa que simplemente puedes usar iter()
y next()
en ellos para recuperar nombres:
>> > import funkybob
>> > generator = funkybob . RandomNameGenerator ()
>> > it = iter ( generator )
>> > next ( it )
'practical_hoover'
>> > next ( it )
'stupefied_ramanujan'
>> > next ( it )
'zealous_aryabhata'
Puede pasar los parámetros members
y separator
para cambiar la cantidad de adjetivos o el formato de los nombres:
>> > # 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'
Los generadores tienen un atributo unique_count
que puede utilizar para verificar la cantidad de nombres únicos que se pueden generar:
>> > generator . unique_count
740094
Además de todo lo anterior, UniqueRandomNameGenerator proporciona una interfaz similar a una secuencia, lo que significa, por ejemplo, que puede utilizar la indexación o el método len()
(que es lo mismo que acceder al atributo unique_count
):
>> > generator = funkybob . UniqueRandomNameGenerator ()
>> > generator [ 0 ]
'xenodochial_yalow'
>> > generator [ 1 ]
'kind_mccarthy'
>> > generator [ 2 ]
'happy_hawking'
>> > len ( generator )
16089
Puedes aumentar el número de members
para aumentar el tamaño, a costa de tener nombres más largos.
UniqueRandomNameGenerator también admite un parámetro adicional: seed
. Esto se puede utilizar para inicializar el generador pseudoaleatorio. Si pasa siempre el mismo valor, se generará la misma secuencia de nombres. Esto puede resultar útil en pruebas cuando necesita nombres predecibles.