Tools for generators, generator functions, and generator-based coroutines
Project description
Tools for generators, generator functions, and generator-based coroutines.
Key features:
Create reusable generators
Compose generators
Build python 2/3-compatible generators (gentools version <1.2 only)
Installation
pip install gentools
Examples
Make generator functions reusable:
>>> @reusable
... def countdown(value, step):
... while value > 0:
... yield value
... value -= step
>>> from_3 = countdown(3, step=1)
>>> list(from_3)
[3, 2, 1]
>>> list(from_3)
[3, 2, 1]
>>> isinstance(from_3, countdown) # generator func is wrapped in a class
True
>>> from_3.step # attribute access to arguments
1
>>> from_3.replace(value=5) # create new instance with replaced fields
countdown(value=5, step=1) # descriptive repr()
map a generator’s yield, send, and return values:
>>> @map_return('final value: {}'.format)
... @map_send(int)
... @map_yield('the current max is: {}'.format)
... def my_max(value):
... while value < 100:
... newvalue = yield value
... if newvalue > value:
... value = newvalue
... return value
>>> gen = my_max(5)
>>> next(gen)
'the current max is: 5'
>>> gen.send(11.3)
'the current max is: 11'
>>> gen.send(104)
StopIteration('final value: 104')
relay a generator’s yield/send interactions through another generator:
>>> def try_until_positive(outvalue):
... value = yield outvalue
... while value < 0:
... value = yield 'not positive, try again'
... return value
>>> @relay(try_until_positive)
... def my_max(value):
... while value < 100:
... newvalue = yield value
... if newvalue > value:
... value = newvalue
... return value
>>> gen = my_max(5)
>>> next(gen)
5
>>> gen.send(-4)
'not positive, try again'
>>> gen.send(-1)
'not positive, try again'
>>> gen.send(8)
8
>>> gen.send(104)
StopIteration(104)
make python 2/3 compatible generators with return. (gentools version <1.2 only)
>>> @py2_compatible
... def my_max(value):
... while value < 100:
... newvalue = yield value
... if newvalue > value:
... value = newvalue
... return_(value)
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
gentools-1.2.2.tar.gz
(6.7 kB
view details)
Built Distribution
File details
Details for the file gentools-1.2.2.tar.gz
.
File metadata
- Download URL: gentools-1.2.2.tar.gz
- Upload date:
- Size: 6.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.10.5
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | c692af51d5a8f7f3406ed8c39d6da686f4f2fe4dbfaa13ddb24035b0471d9305 |
|
MD5 | ab028c8c22a6b8ee11409af248241ab7 |
|
BLAKE2b-256 | 214d68ba01cf9e6da4d024c13684d97206346e9ba11ad470516104e1cd13d857 |
File details
Details for the file gentools-1.2.2-py3-none-any.whl
.
File metadata
- Download URL: gentools-1.2.2-py3-none-any.whl
- Upload date:
- Size: 9.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.10.5
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 75b7b0452691115ad11914e17c8c2b5f9b146b01f20167785e8b6d99b565d190 |
|
MD5 | 724e251cbd474d198052a894530070fc |
|
BLAKE2b-256 | 1412e495615dc5e47c2ad40768c661fdd70e9863cd6aec9d6aac07c2888d6fd8 |