在我的python中,我正在编写一个带**kwargs
的函数。我遇到的问题是我经常将None
作为关键字值传递,这感觉就像糟糕的风格。例如:
def foo(**kwargs):
if 'bar' in kwargs:
return kwargs['bar']
def baz(x=None):
print(foo(bar=x))
这里的问题是如果x
是None,那么我希望它只是打印一下。如果关键字参数为None,如何不将其添加到kwargs
?
答案 0 :(得分:5)
如果None
不是可接受的值,测试该。要么x
baz()
传递None
None
,要么在foo
明确测试None
。您可以使用dict.get()
组合对密钥和值def foo(**kwargs):
bar = kwargs.get('bar')
if bar is not None:
return bar
# return something else
的值进行测试:
def foo(**kwargs):
bar = kwargs.get('bar')
return bar if bar is not None else ''
或者只是使用条件表达式来返回默认值,如空字符串:
None
或返回任何false-y值(0
,空列表,def foo(**kwargs):
return kwargs.get('bar') or ''
等)的默认值:
{{1}}
答案 1 :(得分:0)
正如所指出的,如果None
不是可接受的值,则需要对其进行测试。但是,请记住函数总是返回。如果没有执行return
语句,则返回None
。
因此,如果您想在这种情况下避免打印,实际上需要检查输出是否为None
。
def baz(x=None)
out = foo(bar=x)
if out is not None:
print(out)
或者,您可以确保foo
始终明确返回,这可能更适合重复使用,但会使baz
打印something_else
而不是根本不打印。
def foo(**kwargs):
if 'bar' in kwargs:
return kwargs['bar']
else:
return something_else