Python中如何在仅修改指定参数时保留其余参数的默认值
解决方案
Python原生支持关键字参数传参,完全可以满足只修改指定参数、其余参数走默认值的需求,具体用法如下:
基础用法(对应printWords示例场景)
你不需要传入前面text1的默认值,直接在调用时显式指定要修改的参数名即可:
# 仅修改text2的取值,text1保留默认值"a" printWords(text2="Banana") # 运行输出:The text1 is "a" and text2 is "Banana"
关键字参数不受参数定义顺序限制,你可以任意调整传参顺序:
# 调换参数传参顺序也能正常识别 printWords(text2="Banana", text1="Apple") # 运行输出:The text1 is "Apple" and text2 is "Banana"
针对公司长默认参数老函数的优化方案
方案1:直接指定参数名调用
针对curlSomthing这类带大量长默认参数的老函数,不需要复制任何默认值,直接指定你要修改的参数名传参即可:
# 仅修改someSetting为True,其余两个长文本参数直接用默认值 curlSomthing(someSetting=True) # 仅修改someText的取值,其余参数用默认值 curlSomthing(someText="自定义的短文本")
方案2:封装常用的自定义调用
如果某些参数你需要频繁修改,可以自行封装一层简化调用,不需要改动原有函数:
# 封装自定义调用,默认修改someSetting为True def custom_curl(**kwargs): default_params = { "someSetting": True } # 合并你传入的参数,覆盖默认的自定义参数 default_params.update(kwargs) return curlSomthing(**default_params) # 后续直接调用自定义函数即可 custom_curl() # someSetting为True,其余用原函数默认值 custom_curl(someText="自定义文本") # 同时修改someText和someSetting
方案3:快速查询参数名
如果记不清老函数的参数名,可以用Python标准库inspect快速查看,不需要翻找源码:
import inspect # 打印函数的所有参数和对应默认值 print(inspect.signature(curlSomthing))
内容的提问来源于stack exchange,提问作者saakrubber
相关产品推荐
相关产品推荐

