如何优化代码:仅当变量存在时将其作为函数参数传递?
优化方案:简化条件式函数参数传递
原代码存在重复的函数调用逻辑,维护成本较高,以下是两种更简洁的优化写法:
方案一:动态参数字典 + **解包(推荐)
这种方式严格遵循「变量存在则传参,否则使用函数默认值」的逻辑,同时避免重复代码:
# 初始化基础参数字典 icp_params = { "source": source, "target": target, "max_correspondence_distance": max_cor_dist } # 若transformation有效,添加为init参数(对应原代码的第四个位置参数) if transformation: icp_params["init"] = transformation # 统一调用ICP函数,自动处理参数是否传递 icp_result = o3d.pipelines.registration.registration_icp(**icp_params) transformation = icp_result.transformation
优势:
- 仅需维护一处函数调用,后续修改参数时无需重复调整
- 明确控制参数是否传递,完全匹配原逻辑,避免因传递
None导致的潜在问题 - 代码结构清晰,可读性更强
方案二:条件表达式直接传参
如果确认transformation为假值(如None)时,函数接受该值作为默认行为的等效输入,可使用更紧凑的写法:
transformation = o3d.pipelines.registration.registration_icp( source, target, max_cor_dist, transformation if transformation else None ).transformation
注意:
需确认Open3D的registration_icp函数接受None作为init参数的输入,且效果与不传该参数一致(实际官方文档中init默认是单位矩阵,直接传None可能不符合预期,因此更推荐方案一)
内容的提问来源于stack exchange,提问作者mkr
相关产品推荐
相关产品推荐

