调用后调用嵌套函数时的UnboundLocalError

时间:2013-07-08 19:07:57

标签: python coding-style

假设我有一个非常长的功能,通常我想将其分解为较小的功能以提高可读性。

class A:
    def long_function(self):
        self.helper1()
        self.helper2()
        ...
        return

    def helper1(self):
        #hardwork
    ...

然后我发现python函数可以在其他函数中声明,这有助于组织代码,因为它限制了辅助函数的范围,如果不需要也可以取出self。所以:

class A:
    def long_function(self):
        helper1()
        helper2()
        ...
        return

        def helper1():
            #hardwork
        def helper2():
            #more hardwork

但是,python发送给我一个UnboundLocalError,说在分配之前引用了'helper1'。我知道我可以在他们的通话之上定义它们,但这会破坏易读性的所有目的。我还可以继续使用私有方法填充我的类,但我认为这是次优的。

你有任何吸烟吗?

1 个答案:

答案 0 :(得分:1)

功能从上到下执行。 def是一个可执行语句,与任何其他语句一样,并在执行时执行。如果在函数末尾写def helper1,则在函数结束前不会定义helper1。如果直到最后才定义它,则不能在开头使用它。

如果您想将方法分解为较小的方法,请按照第一个示例中的方法进行操作。这没什么不理想的。您可以使用一个前导下划线(.e.g,_helper1)来命名这些辅助方法,以提醒用户他们不属于公共API。