Skip to main content

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


Download files

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

Source Distribution

decorated_options-0.1.0.tar.gz (11.5 kB view details)

Uploaded Source

File details

Details for the file decorated_options-0.1.0.tar.gz.

File metadata

File hashes

Hashes for decorated_options-0.1.0.tar.gz
Algorithm Hash digest
SHA256 d85586ac70e6e3f6aa82c2c89fcbd794595d3d88cd6acdaebedc29498d1b1d22
MD5 7f011ca7cb0ccda4421fdcd29dedf628
BLAKE2b-256 ca3ab0be237ef9980bde57d1bc26050c746a56ed434375a76d45954c59e6c133

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page