You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python如何仅向被调函数传入非None参数,无需写全组合判断?

方案1:使用locals()快速过滤(最简实现)

在函数最开头获取所有局部变量(此时局部变量只有入参),过滤掉值为None的项后,直接拆包传入myfunc2即可:

def myfunc(a=None, b=None, c=None, d=None):
    # 必须在函数最开头调用locals(),避免后续新增的局部变量混入参数列表
    valid_kwargs = {k: v for k, v in locals().items() if v is not None}
    myfunc2(**valid_kwargs)

注意:如果在调用locals()前定义了其他局部变量,这些变量也会被纳入过滤范围,导致传参错误。

方案2:结合inspect模块稳定获取入参(推荐用于复杂函数)

如果函数内部后续会新增其他局部变量,可以通过inspect模块明确获取当前函数的入参名,只针对入参做过滤,稳定性更高:

import inspect

def myfunc(a=None, b=None, c=None, d=None):
    # 获取当前函数的所有入参名列表
    param_names = [p.name for p in inspect.signature(myfunc).parameters.values()]
    valid_kwargs = {name: locals()[name] for name in param_names if locals()[name] is not None}
    myfunc2(**valid_kwargs)

方案3:修改函数签名用**kwargs接收参数(扩展性最优)

如果允许调整myfunc的定义,直接用关键字参数接收所有传入值,不需要提前声明参数,后续增减参数也不用改过滤逻辑:

def myfunc(**kwargs):
    # 可选:如果需要限制仅允许传入a/b/c/d四个参数,加上以下校验
    allowed_params = {"a", "b", "c", "d"}
    invalid_params = kwargs.keys() - allowed_params
    if invalid_params:
        raise TypeError(f"myfunc() received unexpected parameters: {', '.join(invalid_params)}")
    
    # 过滤掉值为None的参数(如果不需要可直接传**kwargs)
    valid_kwargs = {k: v for k, v in kwargs.items() if v is not None}
    myfunc2(**valid_kwargs)

内容的提问来源于stack exchange,提问作者S_S

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 17:54:03