我是一名工程专业的学生,我必须提交运行模拟代码的项目。计算都是用Python进行的,但推导/设置是在纸上完成的,并包含在报告中。我有时会发现自己在复制和粘贴重复图或数值模拟的代码,所以我想为这些代码编写函数(试图更好地了解DRY(。
当编写函数来做这些事情时,我担心我会"隐藏";函数背后的大部分代码。例如,该函数将绘制两个仅因公差级别不同而不同的模拟。这将用于在ode的数值模拟中检查收敛性。
def plot_visual_convergence_check(odefunc, time, reltol):
sol_1 = solve_ivp(odefunc, time, (0,0), rtol=reltol)
sol_2 = solve_ivp(odefunc, time, (0,0), rtol=reltol/100)
plt.text('rtol is...')
plt.text('rtol for the increased tolerance is...')
plt.plot(<both plots together>)
return plt.show()
在这里,为两个场景运行solve_ivp并绘制它们的相对容差不同的所有业务都被打包为一个场景。我不认为人们会想要细节,只是想要输出和确认";是";模拟已经收敛。我甚至在图上写了两个rtol,以便在不显示代码的情况下更清楚地了解使用了哪些值。
把这些类型的操作包装起来可以吗(因为我认为这样看起来更干净(,或者作为一名工程师,把所有东西都布置好让每个人都能看到,而不必滚动到函数定义,这会更好吗?
根据我的经验,在编写想要重用的库和代码时,dry原则更为重要。然而,我的经验是,如果你想做一份报告,那么有时让东西变干实际上会让东西更难维护。也就是说,有时你希望能够在一个地方更改单个图形/绘图/数据,而不会影响报告的其余部分。这需要一些实践和经验来找出最适合你的方法。在这种特殊的用例中,在编写库或应用程序时,不要太关注DRY规则。
此外,如果我必须做这样一份报告,并且情况允许的话,我会在Jupyter的笔记本上做。在这里,您可以很好地将代码与文本和图形输出混合在一起。