Какое значение по умолчанию использовать для необязательного параметра, который является функцией - PullRequest
1 голос
/ 05 апреля 2020

У меня есть функция с необязательным параметром, которая является другой функцией. Я хочу, чтобы значением по умолчанию для этого параметра была функция, которая ничего не делает.

Чтобы я мог сделать значение по умолчанию 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

Или я мог бы сделать значение по умолчанию 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

Мне интересно, предпочтителен ли один из этих методов в Python. Преимущество использования lambda x: x в том, что func всегда будет иметь тип Callable для проверки типов, в то время как Optional[Callable] будет иметь значение по умолчанию None.

.

1 Ответ

1 голос
/ 05 апреля 2020

Вы можете сделать на один вызов меньше функций, пропустив лямбду и выполнив проверку троичного стиля, например:

def foo(arg, func=None):

    # Other code to get result.

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

В конечном счете, зависит, насколько это важно для вас; Лямбда тоже отлично работает.

...