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の最後まで定義されません。最後まで定義しないと最初から使えません。

メソッドをより小さなものに分割したい場合は、最初の例で行った方法で行ってください。それについて最適ではないことは何もありません。これらのヘルパー メソッドの名前の先頭に 1 つのアンダースコア (. など_helper1) を付けて、それらがパブリック API の一部ではないことをユーザーに警告できます。

于 2013-07-08T19:29:43.333 に答える