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.