Function decorator to make argument passing saner.
Project description
Function decorator to make argument passing saner.
I often have to write a function which runs a simulation/learning task which I need to run for several different parameters. This initially is manageable, but then slowly configuration creep starts to happen: I keep adding more and more parameters to the functions which run the simulations and keep making my old code more and more fragile.
I wrote decorated_options to decouple the arguments for different set of experiments.
In brief, decorated_options converts this:
def run(max_num_followers, num_segments, is_hawkes): # ... # ... # tmp = run_multiple_followers(max_num_followers=10, num_segments=10, is_hawkes=True) # tmp = run_multiple_followers(max_num_followers=100, num_segments=10, is_hawkes=False) # tmp = run_multiple_followers(max_num_followers=10, num_segments=50, is_hawkes=True) tmp = run_multiple_followers(max_num_followers=1000, num_segments=100, is_hawkes=False)
to:
from decorated_options import Options, optioned @optioned('opts') def run(max_num_followers, num_segments, is_hawkes): # ... # ... opts = Options(max_num_followers=10, num_segments=10, is_hawkes=True) # tmp = run_multiple_followers(opts=opts) # tmp = run_multiple_followers(max_num_followers=100, is_hawkes=False, opts=opts) # tmp = run_multiple_followers(num_segments=50, is_hawkes=False, opts=opts) tmp = run_multiple_followers(max_num_followers=1000, num_segments=100, is_hawkes=False)
Benefits over **kwargs in receiving function:
Early reporting of errors at call-time.
No need to unpack the values.
Default values do not have to be hard-coded.
Allows progressive improvement, no need to change old code which uses positional arguments.
Benefits over **dict while calling:
Easier updating/overriding of values
Positional arguments also work
Guaranteed immutability (throws Exceptions on attempted violations.)
Benefits over default values in receiving function:
Options objects can save defaults for multiple settings.
De-couples default values from the functions themselves.
Installation
pip install git+https://github.com/musically-ut/decorated_options.git@master#egg=decorated_options
Development
To run the all tests run:
tox
Note, to combine the coverage data from all the tox environments run:
Windows |
set PYTEST_ADDOPTS=--cov-append tox |
---|---|
Other |
PYTEST_ADDOPTS=--cov-append tox |
Changelog
0.1.0 (2016-07-24)
First release on PyPI.
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
File details
Details for the file decorated_options-0.1.0.tar.gz
.
File metadata
- Download URL: decorated_options-0.1.0.tar.gz
- Upload date:
- Size: 11.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | d85586ac70e6e3f6aa82c2c89fcbd794595d3d88cd6acdaebedc29498d1b1d22 |
|
MD5 | 7f011ca7cb0ccda4421fdcd29dedf628 |
|
BLAKE2b-256 | ca3ab0be237ef9980bde57d1bc26050c746a56ed434375a76d45954c59e6c133 |