Vermillion
Vermillion

Reputation: 1308

Which default value to use for an optional parameter that is a function

I have a function with an optional parameter that is another function. I want the default value of this parameter to be a function that does nothing.

So I could make the default value None:

def foo(arg, func=None):

    # Other code to get result

    if func:
        # Apply the optional func to the result
        result = func(result)

    return result

Or I could make the default value lambda x: x:

def foo(arg, func=lambda x: x):

    # Other code to get result.

    # Apply the func to the result.
    result = func(result)

    return result

I'm wondering if one of these methods is preferred in Python. The benefit I see of using lambda x: x is that func will always have the type Callable for type checking, while it would be Optional[Callable] if the default value was None.

Upvotes: 1

Views: 56

Answers (1)

Benjamin Rowell
Benjamin Rowell

Reputation: 1411

You can make one fewer function calls by skipping the lambda and just doing a ternary style check like this:

def foo(arg, func=None):

    # Other code to get result.

    # Apply the func to the result.
    return func(arg) if func else arg

Ultimately depends how much it matters to you; lambda works fine too.

Upvotes: 1

Related Questions