我想要一个允许你设置默认返回值而不是错误的函数,如果结果为None。这给了我一个如下函数:
def get_name(default=None):
result = get_setting('name')
if result:
return result
elif default:
return default
else:
raise NoNameError
但是,当默认值为IS None
时,这会导致错误。我怎么写这个,以便有人可以调用get_name(default=None)
并获得无回复而不是错误?
我知道我可以做一个黑客,例如:
def get_name(default=SomeSingletonObject):
result = get_setting('name')
if result:
return result
elif default is not SomeSingletonObject:
return default
else:
raise NoNameError
但这只是一种糟糕的形式
答案 0 :(得分:2)
这是在None
完全可接受的输入中使用的常见模式:
_marker = object()
def foo(val1=_marker):
if val1 is _marker:
do_some_stuff()
以下是more-itertools库中更有用的示例:
def first(iterable, default=_marker):
try:
return next(iter(iterable))
except StopIteration:
if default is _marker:
raise ValueError('first() was called on an empty iterable...')
return default