Proteusiq / hadithi

🧪 Data Science | ⚒️ MLOps | ⚙️ DataOps : Talks about 🦄
15 stars 1 forks source link

Misc #14

Open Proteusiq opened 2 years ago

Proteusiq commented 2 years ago

Ideas


# closure, partials, decorator

# we would like to prepopulate value before calling a function
from typing import Callable

FunctionType = Callable[[str, int], str]

# using closure
def function_closure(age: int) -> FunctionType:
    def function(*, name: str, age: int=age) -> str:
        return f'Name {name} | Age {age}'

    return function

function_c = function_closure(age=42)
print(function_c(name='James'))

# using partials 
from functools import partial

def function(*, name: str, age: int) -> str:
    return f'Name {name} | Age {age}'

function_p = partial(function, age=42)
print(function_p(name='James'))

# using decorators
from functools import wraps

def fill(age: int) -> Callable:
    def outer_wrap(func: FunctionType) -> FunctionType:
        @wraps(func)
        def inner_wrap(**kwargs):
            return func(age=age, **kwargs)

        return inner_wrap

    return outer_wrap

@fill(age=42)
def function(*, name: str, age: int) -> str:
    return f'Name {name} | Age {age}'

print(function(name='James'))