Skip to content
Snippets Groups Projects
Commit 6617b0f1 authored by Piotr Maślanka's avatar Piotr Maślanka
Browse files

v2.17.21

parent 748f8353
No related branches found
Tags v2.17.21
No related merge requests found
import typing as tp
import os import os
import random import random
import typing as tp import typing as tp
...@@ -8,22 +9,27 @@ __all__ = ['shuffle_together', 'random_binary', 'random_word'] ...@@ -8,22 +9,27 @@ __all__ = ['shuffle_together', 'random_binary', 'random_word']
from satella.coding.typing import T from satella.coding.typing import T
def random_word(length: int, choice: T = string.ascii_lowercase, def random_word(length: int, choice: tp.Sequence[T] = string.ascii_lowercase,
join_fun: tp.Callable[[T, ...], T] = lambda *args: ''.join(args)): join_fun: tp.Callable[[tp.List[T]], T] = lambda args: ''.join(args)) -> \
tp.Sequence[T]:
""" """
Build and return a random word of provided length. Build and return a random word of provided length.
The word will be built by calling join_fun with length of arguments picked The word will be built by calling join_fun with length of arguments picked
at random from choice. at random from choice.
Best used with strings. Provide a word length, a string to choose from as choice (defaults
to string.ascii_lowercase). Will return by default a string (which coincidentally
happens to be a sequence of strings, albeit one-character ones).
:param length: length of the word :param length: length of the word
:param choice: a range of characters to use. By default is string.ascii_lowercase :param choice: a range of characters to use. By default is string.ascii_lowercase
:param join_fun: an argument to be called with randomly picked characters as *args. :param join_fun: an argument to be called with a list of randomly picked values.
Defaults to ''.join(args), so your T must be a string. If you're passing a Defaults to ''.join(args), so your T must be a string. If you're passing a
different type, remember to alter this function because the default one expects strings! different type, remember to alter this function because the default one expects strings!
:return: a random word :return: a random word
""" """
return join_fun(*(random.choice(choice) for _ in range(length))) return join_fun([random.choice(choice) for _ in range(length)])
def random_binary(length: int) -> bytes: def random_binary(length: int) -> bytes:
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment