Use Factories
Once a factory is created, its next method can be used to generate random values. Generate a value for each use.
>>> import randog.factory
>>> # create a factory
>>> factory = randog.factory.randstr(length=128)
>>> generated1 = factory.next()
>>> assert isinstance(generated1, str)
>>> generated2 = factory.next()
>>> # Note: There is a low probability that they may be identical.
>>> assert generated1 != generated2
Usually used in this way, the following sugar-coated syntax can also be used.
As iterator
Although a factory itself is not an iterator, iter method can be used to create an iterator.
>>> import randog.factory
>>> factory = randog.factory.randstr(length=10)
>>> cnt = 0
>>> for generated in factory.iter(10):
... cnt += 1
... assert isinstance(generated, str)
>>> assert cnt == 10
>>> generated_values = list(factory.iter(5))
>>> assert isinstance(generated_values, list)
>>> assert len(generated_values) == 5
Note
The return value of iter
is not just an Iterable, but also an Iterator. Iterators are disposable and must be regenerated each time they are used.
infinity_iter also returns an iterator, but this iterator will be not terminated.
>>> import randog.factory
>>> factory = randog.factory.randstr(length=10)
>>> keys = ["foo", "bar"]
>>> for k, v in zip(keys, factory.infinity_iter()):
... assert k in keys
... assert isinstance(v, str)
>>> # WARN: Running the code below will continue to generate values indefinitely
>>> # list(factory.infinity_iter())
Warning
infinity_iter
causes an infinite loop. Handle it with care.
Note
The return value of infinity_iter
is not just an Iterable, but also an Iterator. Iterators are disposable and must be regenerated each time they are used.