我目前正在进行手动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
Run Code Online (Sandbox Code Playgroud)
有时我忘了纠正我的小变换中的变量名和小变换中的代码从大块指令中调用变量.
Unittests:通过big_function的单元测试; 重构后开始编辑代码时弹出错误.在项目的当前阶段,为小变换编写单元测试看起来像是一种矫枉过正,因为一旦big_function的内部逻辑清晰,它们将被完全重写.
您可能会发现首先将所有全局变量放入单个(全局)对象中的优点。这使得全局变量的任何使用都变得非常明显,可以帮助您减少/消除它们。
因此,在模块中进行全局声明,例如
dir_root = "/example/rootdir"
debug_level = 3
Run Code Online (Sandbox Code Playgroud)
并将它们包装在一个具有单个声明实例的类中:
class GLOBALS:
dir_root = ...
debug_level = ...
Globals = GLOBALS()
Run Code Online (Sandbox Code Playgroud)
当然,必须更新对变量的现有引用才能使用例如,Globals.dir_root而不是dir_root直接使用。
这样做的好处是,它允许您突出显示全局变量的使用,同时保持应用程序逻辑完整。这使您可以以更增量的方式进行重构,从而不太容易引入新的逻辑错误。根据您原来的问题,您可以确定任何未显式引用该Globals对象的函数都不会使用任何全局变量。