有几次我不得不这样做,我使用了 global
关键字。目前我正在清理一些不属于我的代码,这些代码在没有闭包的 While 语句之后基本上有 20000 行。我想将所有内容在功能上分成更小的部分,但问题是这 200 行中有很多对相同变量的引用。有没有一种方法可以让嵌套函数访问所有父变量而无需显式声明它们?
原来的很长的 while 语句:
While True:
var1, var2, var3, var4 = x, [], {}, y
#does something with var2, var3 and var4
#does something with var1 and var3
#does something with var4 and var1
#etc.
至 ---> 编辑:这是否是一个不正确的解决方案,如果是的话为什么?
class My:
pass
def foo():
#does something with My.var2, My.var3 and My.var4
def bar():
#does something with My.var1 and My.var3
def tar():
does something with My.var4 and My.var1
While True:
My.var1, My.var2, My.var3, My.var4 = x, [], {}, y
#There are a lot of variables to keep track off and declaring each one
# as global will take a lot of extra declarations
foo()
bar()
tar()
最佳答案
跟踪相似变量的另一种方法是将它们放在一个类中。 例如:
class MyClass(object):
def __init__(self, v1, v2, v3, v4):
self.var1 = v1
self.var2 = v2
self.var3 = v3
self.var4 = v4
def run(self):
while True:
self.foo()
self.bar()
self.tar()
def foo(self):
"""does something with var2, var3 and var4"""
return self.var2, self.var3, self.var4
def bar(self):
"""does something with var1 and var3"""
return self.var1, self.var3
def tar(self):
"""does something with var4 and var1"""
return self.var4, self.var1
if __name__ == "__main__":
mc = MyClass('x', [], {}, 'y')
mc.run()
关于Python:访问嵌套函数中的所有父变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24700340/