Skip to main content
Join the official 2019 Python Developers SurveyStart the survey!

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:
    1. Early reporting of errors at call-time.
    2. No need to unpack the values.
    3. Default values do not have to be hard-coded.
    4. Allows progressive improvement, no need to change old code which uses positional arguments.
  • Benefits over **dict while calling:
    1. Easier updating/overriding of values
    2. Positional arguments also work
    3. Guaranteed immutability (throws Exceptions on attempted violations.)
  • Benefits over default values in receiving function:
    1. Options objects can save defaults for multiple settings.
    2. 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

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Files for decorated_options, version 0.1.0
Filename, size File type Python version Upload date Hashes
Filename, size decorated_options-0.1.0.tar.gz (11.5 kB) File type Source Python version None Upload date Hashes View hashes

Supported by

Elastic Elastic Search Pingdom Pingdom Monitoring Google Google BigQuery Sentry Sentry Error logging AWS AWS Cloud computing DataDog DataDog Monitoring Fastly Fastly CDN SignalFx SignalFx Supporter DigiCert DigiCert EV certificate StatusPage StatusPage Status page