Python函数返回可变数量结果时的优雅赋值方法
Pythonic简化写法方案
这里直接给出3种不同场景下的最优实现:
- 方案1:最贴合预期的一行赋值写法(Python 3.0+支持)
利用序列拼接+切片自动补默认值,完全实现你想要的直接拆包效果,不需要额外初始化变量:
bbox, segm = (*test_model(), None)[:2] # 后续逻辑完全不变 if segm is not None: plot(segm)
原理:*test_model()会把返回的列表解包为独立元素,末尾补一个None后取前2位,当返回列表只有1个元素时,第二位就是补的None,和你原有逻辑完全一致。
- 方案2:扩展拆包写法(适配返回值可能后续扩展的场景)
如果未来这个函数可能返回更多元素,用Python的星号扩展拆包兼容性更好:
bbox, *segm_rest = test_model() segm = segm_rest[0] if segm_rest else None if segm is not None: plot(segm)
原理:*segm_rest会接收除第一个元素外的所有剩余返回值,空列表对应没有第二个返回值的场景。
- 方案3:兼容Python 2的简化写法
如果需要兼容Python 2版本,可以直接简化赋值逻辑,省去提前初始化的步骤:
results = test_model() bbox, segm = results[0], results[1] if len(results) > 1 else None if segm is not None: plot(segm)
内容的提问来源于stack exchange,提问作者Gabriele
相关产品推荐
相关产品推荐

