python - возвращает значение по умолчанию

Я пытаюсь имитировать поведение встроенных функций (например,getattr) которые позволяют пользователю указать «по умолчанию» возвращаемое значение Моя первая попытка была сделать это

def myfunc(foo, default=None):
    # do stuff
    if (default is not None):
        return default
    raise SomeException()

Проблема в том, что если пользователи хотятNone чтобы быть их возвращаемым значением, эта функция вместо этого вызовет исключение. вторая попытка:

def myfunc(foo, **kwargs):
    # do stuff
    if ('default' in kwargs):
        return kwargs['default']
    raise SomeException()

Это решает вышеупомянутую проблему и позволяет пользователю указать любое произвольное значение, но вводит раздражение в том, что пользователь должен всегда указыватьdefault=bar в их вызовах функций; они не могут просто предоставитьbar в конце. Точно так же,*args может быть использован, но не позволяет пользователям использоватьdefault=bar если они предпочитают этот синтаксис.

Объединяя*args а также**kwargs обеспечивает работоспособное решение, но кажется, что это потребует много усилий. Это также потенциально маскирует неправильные вызовы функций (например,bar = myfunc(foo, baz, default=qux))

def myfunc(foo, *args, **kwargs):
    # do stuff
    if (len(args) == 1):
        return args[0]
    if ('default' in kwargs):
        return kwargs['default']
    raise SomeException()

Есть ли более простое решение? (Python 3.2, если это имеет значение)

Ответы на вопрос(1)

Ваш ответ на вопрос