1. ホーム
  2. python

[解決済み] Pythonのネストされた関数

2023-03-27 05:42:25

質問

このようなPythonのコードでどのような利点や意味があるのでしょうか。

class some_class(parent_class):
    def doOp(self, x, y):
        def add(x, y):
            return x + y
        return add(x, y)

私はこれをオープンソースのプロジェクトで見つけました。ネストされた関数の内部では何か役に立つことをしていますが、関数の外部ではそれを呼び出す以外は全く何もしていません。(実際のコードは を参照してください。 .) なぜこのようなコードを書くのでしょうか?外側の通常の関数ではなく、ネストされた関数の中にコードを書くことで、何か利点や副作用があるのでしょうか?

どのように解決するのですか?

通常は を閉じる :

def make_adder(x):
    def add(y):
        return x + y
    return add

plus5 = make_adder(5)
print(plus5(12))  # prints 17

内部関数は、包含するスコープから変数にアクセスすることができます(この場合、ローカル変数 x ). 囲んでいるスコープから変数にアクセスしていなければ、実際にはスコープが異なる普通の関数に過ぎないのです。