Python:访问嵌套函数中的所有父变量

标签 python scope

有几次我不得不这样做,我使用了 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/

相关文章:

python - Pycharm 将成员函数重构为 __call__(...)?

Javascript 范围 - 无法访问范围之外的值

c - 在同一作用域内声明两个或多个同名变量

php - 函数内声明函数的作用域

python selenium 说 xpath 表达式无效

python - 保存并使用 TFIDF 矢量器作为将来的示例,然后导致尺寸错误

python - 在 pypy 上安装 pip

python - NaN 作为字典中的关键

perl - perl 中变量的作用域

JavaScript 新函数作用域 ReferenceError