如何丢弃函数参数中的 None 值

Sta*_*ack 1 python function python-3.x

我有一个函数df()可以对输入 *args 执行一些操作:

def df(*args):
    for arg in args:
        # do some computation
Run Code Online (Sandbox Code Playgroud)

我有这三个变量,它们将成为 的参数df()

a = 1234
b = 4321
c = None
Run Code Online (Sandbox Code Playgroud)

有什么办法可以在函数调用中“丢弃”这个非类型值?

我知道我可以在函数内添加一个条件,但在我的情况下,我有更多的函数也将接收这个值,那么有没有办法在函数调用中“丢弃”某种参数?

khe*_*ood 6

从函数参数中过滤掉 None 的装饰器:

def omit_none(f):
    def wrapper(*args):
        args = [arg for arg in args if arg is not None]
        return f(*args)
    return wrapper
Run Code Online (Sandbox Code Playgroud)

然后将其用作

@omit_none
def df(*args):
    for arg in args:
        # do some computation
Run Code Online (Sandbox Code Playgroud)

那是假设您不打算对受影响的函数使用关键字参数。


如果我有另一个函数 bar(user, *args) 并且我只需要在 args 上使用装饰器

好的。这是一个适应性更强的版本:

def omit_none_from(index):
    def omit_none_from(func):
        def wrapper(*args):
            args = list(args[:index]) + [arg for arg in args[index:] if arg is not None]
            return func(*args)
        return wrapper
    return omit_none_from
Run Code Online (Sandbox Code Playgroud)

您用作:

@omit_none_from(1)
def bar(user, *args):
    ...
Run Code Online (Sandbox Code Playgroud)

这将从参数 1 开始过滤掉 None ,因此它将user保持第一个参数不变。