首页 > 解决方案 > 如何丢弃函数参数中的无值

问题描述

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

def df(*args):
    for arg in args:
        # do some computation

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

a = 1234
b = 4321
c = None

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

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

标签: pythonpython-3.xfunction

解决方案


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

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

然后将其用作

@omit_none
def df(*args):
    for arg in args:
        # do some computation

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


如果我有这个其他功能 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

您用作:

@omit_none_from(1)
def bar(user, *args):
    ...

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


推荐阅读