Python技巧:kwargs无对应键时如何使用方法默认参数?
解决方法
你的核心问题是调用myClass.a时,不管有没有val都硬传了n参数,导致方法本身的默认值100被覆盖。可以通过以下两种方式实现需求:
方式一:条件判断传参
直接检查kwargs中是否存在val键,存在则传递对应值,否则直接调用方法不传递n参数,让方法使用自身默认值:
class myClass: # 注:如果是静态方法建议添加@staticmethod装饰器,实例方法需要加self参数 def a(n=100): print(n) def myFunc(**kwargs): if 'val' in kwargs: myClass.a(n=kwargs['val']) else: myClass.a() myFunc() # 输出100(使用a方法的默认值) myFunc(val=50) # 输出50(传入自定义值)
方式二:字典解包简化代码
如果想精简代码,可以用字典解包的方式,只在有val时构造包含n的参数字典,否则传空字典:
def myFunc(**kwargs): myClass.a(**({'n': kwargs['val']} if 'val' in kwargs else {}))
另外补充:原代码中myClass.a的定义不够规范,如果是静态方法,建议加上@staticmethod装饰器;如果是实例方法,第一个参数需要定义为self,否则后续用实例调用时会报错。
内容的提问来源于stack exchange,提问作者Alireza Tabatabaeian
相关产品推荐
相关产品推荐

