Skip to main content

Implicit parameters in Python

Project description

# Implicits
Global state can be hard to reason about, but piping dependencies from function to function is a pain. With implicits, you _explicitly_ which function parameters are _implicit_ dependencies. When you call the function, no need to explicilty provide these parameters; instead, the parameters will be implicitly passed! All that's required is that there exists local variables in scope that match the names of the parameters you're calling.
```python3
@implicits("current_user")
def create_task(title, *, current_user):
print(f"{current_user} created a task titled '{title}'")

current_user = "Jaden"
create_task("Hooray, a task!") # Jaden created a task titled 'Hooray, a task!'
create_task("Buy some trackpants") # Jaden created a task titled 'Buy some trackpants'
```

## Usage
1) Install via `pip install implicits`.
2) Import with `from implicits import implicits`.
3) Decorate using `@implicits("names", "of", "implicit", "parameters")`.

## Example
```python3
import logging
import boto3

from implicits import implicits

class Giraffe:
@implicits("logger")
def __init__(self, name, *, logger):
self.name = name
logger.info(f"Creating a Giraffe named {name}")

@property
@implicits("logger")
def full_name(self, *, logger):
logger.info(f"Getting {self.name}'s full name")
return f"{self.name} the Giraffe"

@property
@implicits("food")
def is_hungry(self, *, food):
return "leaves" in food

@implicits("logger")
def main(*, logger):
jeff = Giraffe("Jeff") # Creating a Giraffe named Jeff
name = jeff.full_name # Getting Jeff's full name
food = ["rocks", "dirt"]
logger.info(jeff.is_hungry) # False
food.append("leaves")
logger.info(jeff.is_hungry) # True

logger = logging.getLogger()
logger.setLevel(logging.INFO)
logger.addHandler(logging.StreamHandler())

main()
```

## References

I didn't invent this idea! Quite a few other languages support implicit parameters. The most mainstream of these languages is Scala. [Check out how implicits work in Scala!](https://docs.scala-lang.org/tour/implicit-parameters.html)


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

implicits-1.0.2.tar.gz (2.5 kB view details)

Uploaded Source

Built Distributions

implicits-1.0.2-py3-none-any.whl (3.7 kB view details)

Uploaded Python 3

implicits-1.0.2-py2-none-any.whl (2.8 kB view details)

Uploaded Python 2

File details

Details for the file implicits-1.0.2.tar.gz.

File metadata

  • Download URL: implicits-1.0.2.tar.gz
  • Upload date:
  • Size: 2.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.12.1 pkginfo/1.4.2 requests/2.21.0 setuptools/40.6.3 requests-toolbelt/0.8.0 tqdm/4.28.1 CPython/3.7.0

File hashes

Hashes for implicits-1.0.2.tar.gz
Algorithm Hash digest
SHA256 6676e25456c654bf551a95ff208c00279cac559001d24e22c345cc94f838b6ba
MD5 444b3bcd3283713b1c9805624a678ec2
BLAKE2b-256 7b760ea282a955c2893a49fc77e44f737f868855386089c3f1e3bed54752d448

See more details on using hashes here.

File details

Details for the file implicits-1.0.2-py3-none-any.whl.

File metadata

  • Download URL: implicits-1.0.2-py3-none-any.whl
  • Upload date:
  • Size: 3.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.12.1 pkginfo/1.4.2 requests/2.21.0 setuptools/40.6.3 requests-toolbelt/0.8.0 tqdm/4.28.1 CPython/3.7.0

File hashes

Hashes for implicits-1.0.2-py3-none-any.whl
Algorithm Hash digest
SHA256 b941cc5c5e8f6f39fe415a3991951fab90267a112299a906cd111aa412c5615d
MD5 9d834c333f7e87a914abe66ca9c35ec4
BLAKE2b-256 8a67aa8d7983b7583fda526171de38c5f3ac6bb5ae5506066c40b06a5fd32d69

See more details on using hashes here.

File details

Details for the file implicits-1.0.2-py2-none-any.whl.

File metadata

  • Download URL: implicits-1.0.2-py2-none-any.whl
  • Upload date:
  • Size: 2.8 kB
  • Tags: Python 2
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.12.1 pkginfo/1.4.2 requests/2.21.0 setuptools/40.6.3 requests-toolbelt/0.8.0 tqdm/4.28.1 CPython/3.7.0

File hashes

Hashes for implicits-1.0.2-py2-none-any.whl
Algorithm Hash digest
SHA256 e6aed18a19802b4459bb4098169c66cdedc65d072eef1cff37c753bcf992c6ca
MD5 1f167ca11d1fb3b0d221498ee7a3b7f0
BLAKE2b-256 2778822122504af0e99234ce9cce6d095b0eebc926f36e8e83de96fa782eb09e

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