优化列表长度判断,实现Python带参/无参函数简洁调用
问题描述
现有格式为 ['func1', parm1] 或 ['func2'] 的列表,部分列表不存在第二个元素。待调用的方法带有**kwargs参数(例如def func1(self, **kwargs)),当前代码实现如下:
cmd = matrix[i][0] value = None len_matrix = len(matrix[i]) if len_matrix > 1: value = matrix[i][1] method = getattr(obj, cmd) if len_matrix > 1: method(x=value) else: method()
需要优化代码,移除对列表长度的判断逻辑,实现更简洁的带参/无参函数调用。
优化方案
可以利用Python的序列解包特性,结合条件构造参数字典,彻底移除长度判断逻辑,实现更简洁的调用:
写法一:条件分支调用
cmd, *rest = matrix[i] getattr(obj, cmd)(x=rest[0]) if rest else getattr(obj, cmd)()
写法二:构造kwargs字典解包调用
cmd, *rest = matrix[i] kwargs = {'x': rest[0]} if rest else {} getattr(obj, cmd)(**kwargs)
逻辑说明
cmd, *rest = matrix[i]:将列表第一个元素赋值给cmd,剩余元素存入rest列表。如果原列表只有一个元素,rest就是空列表。- 两种写法都通过
rest是否为空来自动处理传参逻辑,无需手动判断列表长度。如果需要兼容原列表可能有多个额外元素但仅取第二个的场景,写法二的扩展性更强。
内容的提问来源于stack exchange,提问作者aleksander
相关产品推荐
相关产品推荐

