S_S*_*S_S 8 python user-defined-functions nonetype
我有一个带有四个参数a、b、c和的函数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。例如,如果用户传递a和din 的值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)
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)