关于如何删除python中重复代码的建议
我使用的是Pyqt5,每个函数都会传递一个不同的数据帧,这取决于创建不同图形的数据。似乎有很多重复的代码,我想知道您是否可以提供关于如何重构下面代码的建议 连接信号和插槽 连接到按钮的功能 图表类关于如何删除python中重复代码的建议,python,Python,我使用的是Pyqt5,每个函数都会传递一个不同的数据帧,这取决于创建不同图形的数据。似乎有很多重复的代码,我想知道您是否可以提供关于如何重构下面代码的建议 连接信号和插槽 连接到按钮的功能 图表类 首先将图表类修改为不明确 class Chart: ... def plot_chart(self, figure, plot, ylabel): plt.figure(figure) plt.plot(plot)
首先将图表类修改为不明确
class Chart:
...
def plot_chart(self, figure, plot, ylabel):
plt.figure(figure)
plt.plot(plot)
plt.ylabel(ylabel)
plt.show()
然后,您可以创建一个函数来创建图表:
def create_chart(self, num, name, Title, StartDate, EndDate, Data):
c = Chart(Title,StartDate,EndDate,Data)
c.PlotChart(num, [1, 2, 3, 4], f'Chart {name}')
然后使用getattr
和循环连接它们:
for num, name in enumerate('ABCDEFGH', 1):
plot = getattr(self.ui, f'Plot{name}')
plot.clicked.connect(
lambda: self.create_chart(num, name,
self.ui.Title,
self.ui.StartDate,
self.ui.EndDate,
self.A))
首先将图表类修改为不明确
class Chart:
...
def plot_chart(self, figure, plot, ylabel):
plt.figure(figure)
plt.plot(plot)
plt.ylabel(ylabel)
plt.show()
然后,您可以创建一个函数来创建图表:
def create_chart(self, num, name, Title, StartDate, EndDate, Data):
c = Chart(Title,StartDate,EndDate,Data)
c.PlotChart(num, [1, 2, 3, 4], f'Chart {name}')
然后使用getattr
和循环连接它们:
for num, name in enumerate('ABCDEFGH', 1):
plot = getattr(self.ui, f'Plot{name}')
plot.clicked.connect(
lambda: self.create_chart(num, name,
self.ui.Title,
self.ui.StartDate,
self.ui.EndDate,
self.A))
首先,我要删除
charts
的方法名称中对特定图表的所有显式引用:
类图表():
定义初始日期(自我、标题、开始日期、结束日期、数据):
self.Title=标题
self.StartDate=StartDate
self.EndDate=EndDate
self.Data=Data
def绘图仪(自身、图表):
如果图表=='A':
#图面数据
plt.图(1)
plt.绘图([1,2,3,4])
#打印(self.Data.head())
elif图表==“B”:
plt.图(2)
plt.绘图([1,2,3,4])
elif图表=='C':
plt.图(2)
plt.绘图([1,2,3,4])
#打印(self.Data.head())
elif图表=='D':
plt.图(4)
plt.绘图([1,2,3,4])
elif图表=='E':
plt.图(5)
plt.绘图([1,2,3,4])
elif图表=='F':
plt.图(6)
plt.绘图([1,2,3,4])
elif图表=='G':
plt.图(7)
plt.绘图([1,2,3,4])
elif图表==“H”:
plt.图(8)
plt.绘图([1,2,3,4])
elif图表==“I”:
plt.图(9)
plt.绘图([1,2,3,4])
其他:
返回
plt.ylabel('图表'+图表)
plt.show()
然后,您的CreateChart
函数都简化为一个:
def CreateChart(self、图表、标题、开始日期、结束日期、数据):
c=图表(标题、开始日期、结束日期、数据)
c、 绘图仪(图表)
连接功能也类似:
对于“ABCDEFGHJI”中的图表:
fn=lambda:self.CreateChart(Chart,self.ui.Title,self.ui.StartDate,self.ui.EndDate,getattr(self,Chart))
getattr(self.ui,“绘图”+图表)。单击。连接(fn)
注意:Python中的惯例是对变量名和函数名使用小写和下划线,例如
title
、start\u date
、chart
、plot\u chart
等,以将它们与类名区分开来。我建议在您的代码中采用这一点。我首先要删除图表的方法名称中对特定图表的所有显式引用:
类图表():
定义初始日期(自我、标题、开始日期、结束日期、数据):
self.Title=标题
self.StartDate=StartDate
self.EndDate=EndDate
self.Data=Data
def绘图仪(自身、图表):
如果图表=='A':
#图面数据
plt.图(1)
plt.绘图([1,2,3,4])
#打印(self.Data.head())
elif图表==“B”:
plt.图(2)
plt.绘图([1,2,3,4])
elif图表=='C':
plt.图(2)
plt.绘图([1,2,3,4])
#打印(self.Data.head())
elif图表=='D':
plt.图(4)
plt.绘图([1,2,3,4])
elif图表=='E':
plt.图(5)
plt.绘图([1,2,3,4])
elif图表=='F':
plt.图(6)
plt.绘图([1,2,3,4])
elif图表=='G':
plt.图(7)
plt.绘图([1,2,3,4])
elif图表==“H”:
plt.图(8)
plt.绘图([1,2,3,4])
elif图表==“I”:
plt.图(9)
plt.绘图([1,2,3,4])
其他:
返回
plt.ylabel('图表'+图表)
plt.show()
然后,您的CreateChart
函数都简化为一个:
def CreateChart(self、图表、标题、开始日期、结束日期、数据):
c=图表(标题、开始日期、结束日期、数据)
c、 绘图仪(图表)
连接功能也类似:
对于“ABCDEFGHJI”中的图表:
fn=lambda:self.CreateChart(Chart,self.ui.Title,self.ui.StartDate,self.ui.EndDate,getattr(self,Chart))
getattr(self.ui,“绘图”+图表)。单击。连接(fn)
注意:Python中的惯例是对变量名和函数名使用小写和下划线,例如title
、start\u date
、chart
、plot\u chart
等,以将它们与类名区分开来。我建议在代码中采用这一点