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
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
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
|