我正在寻找模仿内置函数的行为(例如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
and **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,如果有的话)