我的脚本中有一个大型函数,其中包含程序的大部分逻辑。
有一次,它曾经跨越约 100 行,然后我尝试将其重构为多个较小的函数。然而,我有许多局部变量最终会在较小的函数中被修改,我需要一些方法来在较大的函数范围内跟踪它们。
例如,它看起来像
def large_func():
x = 5
... 100 lines ...
到
def large_func():
x = 6
small_func_that_will_increment_x()
small_func()
....
什么是处理这个问题的 pythonic 方法?
我能想到的两种方法是:
1) 全局变量 --- 可能会变得困惑,因为我有很多变量 2) 使用字典来跟踪它们,例如
tracker = {
'field1' : 5
'field2' : 4
}
而是对字典进行修改。
有没有我可能忽略的不同方法来做到这一点?
最佳答案
没有更多信息,很难知道这是否合适,但是……
一个对象就是一个命名空间。特别是,您可以将这些局部变量中的每一个都转换为对象的属性。例如:
class LargeThing(object):
def __init__(self):
self.x = 6
def large_func(self):
self.small_func_that_will_increment_x()
self.small_func()
# ...
def small_func_that_will_increment_x(self):
self.x += 1
无论 self.x = 6
属于 __init__
还是在 large_func
的开头,或者这是否是一个好主意,取决于所有这些变量的实际含义,以及它们如何组合在一起。
关于Python 大函数多变量(重构),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18137555/