Python 仅将非 None 的参数传递给函数

S_S*_*S_S 8 python user-defined-functions nonetype

我有一个带有四个参数abc和的函数d,如下所示。

def myfunc(a=None,b=None,c=None,d=None):
    
    if <check which are not None>:
        myfunc2(<pass those which are not None>)
Run Code Online (Sandbox Code Playgroud)

我需要myfunc2在该函数内调用另一个函数,但仅使用用户传入的参数myfunc。例如,如果用户传递adin 的值myfunc,那么我需要调用myfunc2为:

myfunc2(a=a, d=d)
Run Code Online (Sandbox Code Playgroud)

有没有一种简单的方法可以做到这一点,而不是if为所有可能的组合编写案例a,b,c,d

小智 13

您可以使用字典理解来创建一个不带参数的字典,并将其myfunc2通过解包传递给它。

def myfunc(a=None,b=None,c=None,d=None):
    params = {
        "a": a,
        "b": b,
        "c": c,
        "d": d,
    }

    not_none_params = {k:v for k, v in params.items() if v is not None}
    myfunc2(**not_none_params)
Run Code Online (Sandbox Code Playgroud)


Pau*_*ius 5

def myfunc(**kwargs):
    myfunc2(**{k:v for k, v in kwargs.items() if v is not None})
Run Code Online (Sandbox Code Playgroud)

如果您想使用 4 个指定的默认参数保留函数的调用签名,您可以这样做:

def myfunc(a=None, b=None, c=None, d=None):
    def f(**kwargs):
        return myfunc2(**{k:v for k, v in kwargs.items() if v is not None})
    return f(a=a, b=b, c=c, d=d)
Run Code Online (Sandbox Code Playgroud)