如何消除Python代码中多版本变量的重复操作代码?
优化重复代码:复用逻辑处理不同后缀的变量
原重复代码
if sType_A == sBirth_F: sOriginalDate = tbBDate.get(1.0, "end-1c") tbBDate.config( state= "normal" ) tbBDate.delete("1.0","end") sDate_G = getVerifiedDate( sOriginalDate ) tbBDate.insert( '1.0', sDate_G ) tbBDate.config( state= "disabled" ) svBDate.set( sDate_G ) if sType_A == "Marriage": sOriginalDate = tbMDate.get(1.0, "end-1c") tbMDate.config( state= "normal" ) tbMDate.delete("1.0","end") sDate_G = getVerifiedDate( sOriginalDate ) tbMDate.insert( '1.0', sDate_G ) tbMDate.config( state= "disabled" ) svMDate.set( sDate_G ) if sType_A == "Location": sOriginalDate = tbLDate.get(1.0, "end-1c") tbLDate.config( state= "normal" ) tbLDate.delete("1.0","end") sDate_G = getVerifiedDate( sOriginalDate ) tbLDate.insert( '1.0', sDate_G ) tbLDate.config( state= "disabled" ) svLDate.set( sDate_G ) if sType_A == "Occupation": sOriginalDate = tbODate.get(1.0, "end-1c") tbODate.config( state= "normal" ) tbODate.delete("1.0","end") sDate_G = getVerifiedDate( sOriginalDate ) tbODate.insert( '1.0', sDate_G ) tbODate.config( state= "disabled" ) svODate.set( sDate_G ) if sType_A == "Death": sOriginalDate = tbDDate.get(1.0, "end-1c") tbDDate.config( state= "normal" ) tbDDate.delete("1.0","end") sDate_G = getVerifiedDate( sOriginalDate ) tbDDate.insert( '1.0', sDate_G ) tbDDate.config( state= "disabled" ) svDDate.set( sDate_G )
优化方案
通过字典映射将类型与对应控件、变量绑定,再编写通用处理函数,一次性复用所有重复逻辑:
- 建立类型与控件、变量的映射关系:
# 把每个类型对应的文本框和变量关联起来 type_control_map = { sBirth_F: (tbBDate, svBDate), "Marriage": (tbMDate, svMDate), "Location": (tbLDate, svLDate), "Occupation": (tbODate, svODate), "Death": (tbDDate, svDDate) }
- 编写通用处理函数,封装重复操作逻辑:
def process_date_input(text_box, sv_var): sOriginalDate = text_box.get(1.0, "end-1c") text_box.config(state="normal") text_box.delete("1.0", "end") sDate_G = getVerifiedDate(sOriginalDate) text_box.insert('1.0', sDate_G) text_box.config(state="disabled") sv_var.set(sDate_G)
- 根据类型匹配映射,执行通用处理:
# 匹配到对应类型后直接调用函数处理 if sType_A in type_control_map: tb, sv = type_control_map[sType_A] process_date_input(tb, sv)
后续新增类型时,仅需在type_control_map中添加对应的键值对即可,无需重复编写相同逻辑,大幅提升代码可维护性。
内容的提问来源于stack exchange,提问作者Trevor Boardman
相关产品推荐
相关产品推荐

