我目前正在进行手动 python 代码重构。
为了确保我没有因为忘记更正我在函数中包含的指令而破坏原始代码,我想确保在我测试它们时该函数无法访问全局变量。除了将它们复制到单独的模块中,正确的方法是什么?
编辑:
明确一点:我正在尝试将我的初始代码转换成如下内容:
def big_function(args):
def one_small_transformation(args):
# No one else needs to see this transformation outside the function1
def second_small_transformation(args):
...
# Block of instructions chaining small transformations
# Other big functions and code making them work together
有时我忘记更正我的小转换中的变量名,小转换中的代码从大指令 block 调用变量。
单元测试: big_function 单元测试通过;重构后开始编辑代码时会出现错误。在项目的当前阶段,为小转换编写单元测试看起来有点矫枉过正,因为一旦 big_function 的内部逻辑清晰,它们将完全重写。
最佳答案
您可能会发现首先将所有全局变量放入一个单例(全局)对象中是有好处的。这使得对全局变量的任何使用都变得非常明显,从而帮助您朝着减少/消除它们的目标迈进。
所以,在一个模块中进行全局声明
dir_root = "/example/rootdir"
debug_level = 3
并将它们包装在一个具有单个声明实例的类中:
class GLOBALS:
dir_root = ...
debug_level = ...
Globals = GLOBALS()
当然,必须更新对变量的现有引用才能使用,例如Globals.dir_root
而不是直接使用 dir_root
。
这样做的好处是,它允许您在保持应用程序逻辑完整的同时突出显示全局变量的用法。这使您能够以更不易引入新逻辑错误的增量方式进行重构。根据您最初的问题,您可以确定任何未明确引用 Globals
对象的函数都没有使用任何全局变量。
关于python - 有没有办法禁止 python 函数使用除本地变量之外的任何变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20787845/