0

假设我有一个很长的函数,我经常想把它分解成更小的函数以提高可读性。

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'我知道我可以在他们的调用之上定义它们,但这会破坏所有易于阅读的目的。我也可以继续用私有方法填充我的课程,但我认为这是次优的。

你有什么建议吗?

4

1 回答 1

1

函数从上到下执行。 def与任何其他语句一样,是一个可执行语句,并在执行到它时执行。如果你def helper1在函数的末尾写了,helper1直到函数的末尾才会被定义。如果直到最后都没有定义,则不能在开始时使用它。

如果您想将您的方法分解成更小的方法,请按照您在第一个示例中的方式进行操作。没有什么是次优的。您可以使用一个前导下划线(例如,_helper1)来命名这些辅助方法,以提醒用户它们不是公共 API 的一部分。

于 2013-07-08T19:29:43.333 回答