You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何消除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 )

优化方案

通过字典映射将类型与对应控件、变量绑定,再编写通用处理函数,一次性复用所有重复逻辑:

  1. 建立类型与控件、变量的映射关系:
# 把每个类型对应的文本框和变量关联起来
type_control_map = {
    sBirth_F: (tbBDate, svBDate),
    "Marriage": (tbMDate, svMDate),
    "Location": (tbLDate, svLDate),
    "Occupation": (tbODate, svODate),
    "Death": (tbDDate, svDDate)
}
  1. 编写通用处理函数,封装重复操作逻辑:
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)
  1. 根据类型匹配映射,执行通用处理:
# 匹配到对应类型后直接调用函数处理
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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 18:05:31