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)