如果它是None,则不能将kwarg传递给函数

时间:2018-03-02 16:10:29

标签: python python-3.x

在我的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

2 个答案:

答案 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