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, если это имеет значение)