在我的工程计算中 DRY 是多少?

问题描述

我是一名工程专业的学生,​​我必须上交运行模拟代码的项目。计算全部在 Python 中进行,但推导/设置是在纸上完成并包含在报告中。我有时会发现自己复制和粘贴代码以用于重复图形或数值模拟,因此我想为这些编写函数(尝试更好地使用 DRY)。

在编写函数来做这些事情时,我担心我“隐藏”了函数背后的大部分代码。例如,此函数将绘制仅在容差水平上不同的两个模拟。这将用于检查 ode 数值模拟中的收敛性。

def plot_visual_convergence_check(odefunc,time,reltol):
    sol_1 = solve_ivp(odefunc,(0,0),rtol=reltol)
    sol_2 = solve_ivp(odefunc,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,以便在不显示代码的情况下更清楚地了解使用了哪些值。

将这些类型的操作包装起来是否可以(因为我认为这样看起来更干净),还是作为工程师,将所有内容都布置好让每个人都可以看到,而无需他们滚动到函数定义?

解决方法

根据我的经验,在编写要重用的库和代码时,干燥原则更为重要。但是我的经验是,如果您想制作报告,那么有时将事情弄干实际上会使事情更难维护。 IE。有时您希望能够在一个地方更改单个图形/绘图/数据片段,而不会影响报告的其余部分。需要一些练习和经验才能找出最适合您的方法。在这个特定的用例中,在编写库或应用程序时,不要那么关注遵循 DRY 规则。

另外,如果我必须做出这样的报告并且情况允许的话。我会在 Jupyter 笔记本中赚钱。在这里,您可以很好地将代码与文本和图形输出混合在一起。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...