python - zwracając wartość domyślną

Chcę naśladować zachowanie wbudowanych funkcji (npgetattr), które pozwalają użytkownikowi określić „domyślną” wartość zwracaną. Moją pierwszą próbą było to zrobić

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

Problem polega na tym, że użytkownicy tego chcąNone aby być ich wartością zwracaną, ta funkcja zamiast tego wywołałaby wyjątek. drugie podejście:

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

To rozwiązuje powyższy problem i pozwala użytkownikowi określić dowolną wartość, ale wprowadza irytację, ponieważ użytkownik musi zawsze określaćdefault=bar w wywołaniach funkcji; nie mogą po prostu zapewnićbar na końcu. Również,*args może być używany, ale uniemożliwia użytkownikom korzystaniedefault=bar jeśli wolą tę składnię.

Łączenie*args i**kwargs zapewnia sprawne rozwiązanie, ale wydaje się, że będzie to wymagało dużego wysiłku. Potencjalnie maskuje również nieprawidłowe wywołania funkcji (npbar = 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()

Czy istnieje prostsze rozwiązanie? (python 3.2, jeśli to ma znaczenie)

questionAnswers(1)

yourAnswerToTheQuestion