Python中能否传入等效于默认值的参数调用第三方函数?
实现第三方函数默认参数调用的简洁方式
直接传入某个值让f(a)完全等效于f()是做不到的——第三方函数f会把你传入的任何值当作a的实参,覆盖它自身的默认值(除非f内部有针对特定值的判断逻辑,但你无法修改f的代码)。
不过可以通过以下两种方式实现类似需求,彻底摆脱样板代码:
方式一:利用关键字参数展开(轻量首选)
定义一个唯一的标记对象,通过判断是否传递关键字参数来让f使用默认值:# 用object()创建唯一标记,不会和其他业务值冲突 DEFAULT = object() def call_f(a=DEFAULT): # 如果传入的是DEFAULT,就不传a参数,让f用默认值;否则传入a kwargs = {} if a is DEFAULT else {'a': a} return f(**kwargs)使用时,外部传入的值如果是
DEFAULT,调用call_f(a)就等效于f();传入其他值则等效于f(该值),完全不需要写if-else判断。方式二:结合inspect模块获取默认值
如果需要明确复用f的默认值,可以用inspect模块解析函数签名获取默认参数:from inspect import signature DEFAULT = object() def call_f(a=DEFAULT): # 获取f的参数签名 sig = signature(f) # 拿到参数a的默认值 default_a = sig.parameters['a'].default # 用默认值或传入值调用f return f(a if a is not DEFAULT else default_a)这种方式会主动获取
f的默认值,适合需要显式使用默认值的场景,但依赖inspect模块,相对重一些。
内容的提问来源于stack exchange,提问作者Ophir Yoktan
相关产品推荐
相关产品推荐

