您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

“导入模块”的编码样式是否比“来自模块导入功能”的编码样式更好?

“导入模块”的编码样式是否比“来自模块导入功能”的编码样式更好?

您为IM / FPIM列出的否定词通常可以通过适当使用as子句来改善。 from some.package import mymodulewithalongname as mymod可以有效地缩短代码并提高其可读性,如果重命名mymodulewithalongnamesomethingcompletelydifferent明天,则该as子句可以用作单个语句进行编辑。

考虑您的FMIF前点3(重定向时称为R)与FPIM的前点2(灵活性时称为F):R等于促进模块边界完整性的丧失,而F则增强了模块边界的完整性。模块中的多个函数,类和变量通常旨在协同工作:不应将它们独立切换为不同的含义。例如,考虑模块random及其功能seed以及uniform:如果要将其中一个的导入切换到其他模块,则将中断对的调用seed与对的调用结果之间的常规连接uniform。当一个模块设计得很好,具有内聚力和完整性时,R打破模块边界的便利实际上是不利的- 它使您做得更好的事情变得更容易 这样做。

反之亦然,F使耦合的函数,类和变量(因此,通常,通过模块化 属于 同一实体的实体)之间的 协调 切换成为可能。例如,要使测试可重复(FPIM要点1),请在模块中和两者同时进行模拟,如果代码遵循FPIM,则一切就绪,可以保证协调。但是,如果您有直接导入函数代码,则必须查找每个此类模块,并一遍又一遍地重复模拟。要使测试完全可重复,通常还需要对日期和时间函数进行“协调模拟”-如果在某些模块中使用,则需要查找并模拟所有这些(以及所有进行模拟的模拟) __seed``random``random``from datetime import datetime``from time import time,依此类推),以确保当系统的各个部分询问“现在几点了?”时收到的所有时间。完全一致(如果使用FPIM,则只需模拟两个相关模块)。

我喜欢FPIM,因为通过使用有真的没有太多的附加价值 乘以 合格的名称,而不是一个单独合格的一个(而barenames和合格的名称间的差异是巨大的 -你会得到 一个合格的名字更多的控制,无论是单或成倍增加,比起用一个裸名!

嗯,不能把所有的工作时间都花在回答您的每一个问题上-您的问题可能应该是六个问题;-)。我希望这至少能解决“为什么F比R更好”以及一些模拟/测试问题-归结为维护和增强设计良好的模块化 (通过F)而不是破坏(通过R)。

其他 2022/1/1 18:35:15 有457人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶