有没有办法禁止python函数使用除局部变量以外的任何变量?

2024-04-20 04:59:27 发布

您现在位置:Python中文网/ 问答频道 /正文

我目前正在做手工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

有时我会忘记更正小转换中的变量名,而小转换中的代码会从一大块指令中调用变量。你知道吗

单元测试:大函数的单元测试已通过;当我在重构后开始编辑代码时,会出现错误。在项目的当前阶段,为小的转换编写unittest看起来是一种过度的操作,因为一旦big\u函数的内部逻辑清楚了,它们就会被完全重写。你知道吗


Tags: 函数代码编辑内容def指令args单元测试
1条回答
网友
1楼 · 发布于 2024-04-20 04:59:27

您可能会发现,首先将所有全局变量放入一个单例(全局)对象是有好处的。这使得对全局变量的任何使用都非常明显,在您打算减少/消除全局变量的过程中帮助您。你知道吗

所以,在一个模块中使用全局声明,比如

dir_root = "/example/rootdir"
debug_level = 3

并将它们包装在一个类中,其中包含一个声明的实例:

class GLOBALS:
  dir_root = ...
  debug_level = ...

Globals = GLOBALS()

当然,必须更新对变量的现有引用,以便直接使用Globals.dir_root而不是dir_root。你知道吗

这样做的好处是,它允许您突出显示globals的用法,同时保持应用程序逻辑的完整性。这允许您以更增量的方式进行重构,这样就不太容易引入新的逻辑错误。根据您最初的问题,您可以确定任何没有显式引用Globals对象的函数都没有使用任何全局变量。你知道吗

相关问题 更多 >