Skip to main content

Helper decorator to lock default mutable values

Project description

lock-defaults

This decorator is small and only relies on the standard library, so can just be copied into a project.

Python has a weird behaviour around default values for functions. If you use an empty list as a default argument, things added to the list during the function can hang around for next time the function is called. A common pattern of dealing with this is the following:

def func(foo = None):
    if foo is None:
        foo = []

But this looks rubbish! And gets worse when you add typing:

def func(foo: list | None = None):
    if foo is None:
        foo = []

You don't need that workaround for any other of default value. Why does the list parameter have to pretend it can be None, when that's not the intention at all?

The lockmutabledefaults decorator fixes this by introducing what should be the default approach, and default values that are lists, dictionaries or sets are isolated in each re-run.

@lockmutabledefaults
def func(foo: list = []):
    pass

Install

You can install from pip: python -m pip install lock-defaults

Or you can copy the function directly into your projects.

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

lock-defaults-0.1.0.tar.gz (3.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

lock_defaults-0.1.0-py3-none-any.whl (5.0 kB view details)

Uploaded Python 3

File details

Details for the file lock-defaults-0.1.0.tar.gz.

File metadata

  • Download URL: lock-defaults-0.1.0.tar.gz
  • Upload date:
  • Size: 3.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.1.13 CPython/3.10.2 Linux/5.13.0-1025-azure

File hashes

Hashes for lock-defaults-0.1.0.tar.gz
Algorithm Hash digest
SHA256 4d9dc6a4b5392ec800e0e2d42dc169430c934aed44afae3d494eb783f83f3f65
MD5 8270e59fa565a77e5783a0a45b69fd6c
BLAKE2b-256 d225205a3d4d6c6c5cc01ff3a62e4e463031469ca490bb08d8dcfe6be23fa2e1

See more details on using hashes here.

File details

Details for the file lock_defaults-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: lock_defaults-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 5.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.1.13 CPython/3.10.2 Linux/5.13.0-1025-azure

File hashes

Hashes for lock_defaults-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 d7b2774c9f26af2e89a3a13f6e6d9f852cdae661c1bc036097d42e4ed3cc65c1
MD5 e45e34767c38992d29b322d78a138d23
BLAKE2b-256 17d31d906cde478558fef09229b174a87ac069f30e800b6b49eda7fdf7d39ac0

See more details on using hashes here.

Supported by

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