MyModHeaven 发表于 2022-6-11 08:44

【python】重复度很高的两段代码精简的问题

本帖最后由 MyModHeaven 于 2022-6-11 08:45 编辑




[*]如上图,上下两部分不同的都已标注(少标了一个处),共有三种,内容分别是:checkIn/checkOut, tabCheckIn/tabCheckOut, '入库'/'出库'
[*]函数可以提高代码的复用性,但是引用同一个函数的时候,变化的是变量。像这种情况,变化的是一条语句中间的某个对象,该怎么弄?(我还碰到过,几段重复性很高的代码中,变化的是某条语句的有无,这又该怎么搞?)
[*]代码如下:
      item = self.checkIn.horizontalHeaderItem(0)
      item.setText(_translate("MainWindow", "日期"))
      item = self.checkIn.horizontalHeaderItem(1)
      item.setText(_translate("MainWindow", "编码"))
      item = self.checkIn.horizontalHeaderItem(2)
      item.setText(_translate("MainWindow", "名称"))
      item = self.checkIn.horizontalHeaderItem(3)
      item.setText(_translate("MainWindow", "内存"))
      item = self.checkIn.horizontalHeaderItem(4)
      item.setText(_translate("MainWindow", "颜色"))
      item = self.checkIn.horizontalHeaderItem(5)
      item.setText(_translate("MainWindow", "计量单位"))
      item = self.checkIn.horizontalHeaderItem(6)
      item.setText(_translate("MainWindow", "单价"))
      item = self.checkIn.horizontalHeaderItem(7)
      item.setText(_translate("MainWindow", "数量"))
      item = self.checkIn.horizontalHeaderItem(8)
      item.setText(_translate("MainWindow", "金额"))
      self.tabWidget.setTabText(self.tabWidget.indexOf(self.tabCheckIn), _translate("MainWindow", "入库"))
      item = self.checkOut.horizontalHeaderItem(0)
      item.setText(_translate("MainWindow", "日期"))
      item = self.checkOut.horizontalHeaderItem(1)
      item.setText(_translate("MainWindow", "编码"))
      item = self.checkOut.horizontalHeaderItem(2)
      item.setText(_translate("MainWindow", "名称"))
      item = self.checkOut.horizontalHeaderItem(3)
      item.setText(_translate("MainWindow", "内存"))
      item = self.checkOut.horizontalHeaderItem(4)
      item.setText(_translate("MainWindow", "颜色"))
      item = self.checkOut.horizontalHeaderItem(5)
      item.setText(_translate("MainWindow", "计量单位"))
      item = self.checkOut.horizontalHeaderItem(6)
      item.setText(_translate("MainWindow", "单价"))
      item = self.checkOut.horizontalHeaderItem(7)
      item.setText(_translate("MainWindow", "数量"))
      item = self.checkOut.horizontalHeaderItem(8)
      item.setText(_translate("MainWindow", "金额"))
      self.tabWidget.setTabText(self.tabWidget.indexOf(self.tabCheckOut), _translate("MainWindow", "出库"))

child_lu 发表于 2022-6-11 08:51

1.带形参的函数
2.继承

忆白学渣 发表于 2022-6-11 08:51

把变量都弄成数组,直接循环

MyModHeaven 发表于 2022-6-11 08:57

忆白学渣 发表于 2022-6-11 08:51
把变量都弄成数组,直接循环

变化的不全是变量呢,比如:item = self.checkIn.horizontalHeaderItem(0) 变成了 item = self.checkOut.horizontalHeaderItem(0),这该怎么办啊?

忆白学渣 发表于 2022-6-11 09:01

我感觉不太好办哈哈,菜鸟建议,加个判断,不同情况进不一样的循环{:1_893:}

带色的小马甲 发表于 2022-6-11 09:26

这样试试
https://s2.loli.net/2022/06/11/Y1ex2gwRhalcurs.png

大爱九月 发表于 2022-6-11 10:08

可以考虑弄三个数组
{0,1,2,3,4,5,6,7,8,0,1,2,3,4,5,6,7,8}
{0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1}0是checkIn   1是checkOut
{"日期","编码"........)
全都一一对应,然后弄一个循环
判定第二个数组是0就checkIN,第一个数组是8了就多一个setTabText

大爱九月 发表于 2022-6-11 10:12

大爱九月 发表于 2022-6-11 10:08
可以考虑弄三个数组
{0,1,2,3,4,5,6,7,8,0,1,2,3,4,5,6,7,8}
{0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1}0 ...
如果规则比较固定,直接两个数组就可以
{0,1,2,3,4,5,6,7,8}
{"日期",“编码”.....,"金额"}

然后固定循环18次(从1-18),小于等于9就是CheckIn,大于9就checkOut,循环次数%9==0就多一个setTabText

VoidreaverArer 发表于 2022-6-11 10:15

设置函数,带形参,然后引用即可

三滑稽甲苯 发表于 2022-6-11 12:49

MyModHeaven 发表于 2022-6-11 08:57
变化的不全是变量呢,比如:item = self.checkIn.horizontalHeaderItem(0) 变成了 item = self.checkOut. ...

函数也可以看成变量,放在list/tuple里
页: [1] 2
查看完整版本: 【python】重复度很高的两段代码精简的问题