高次関数
関数はPythonの第一級市民です
関数もオブジェクト、呼び出し可能オブジェクトです
関数は、通常の変数、パラメーター、戻り値などとして使用できます。
高次関数になるために必要な条件:
1つ以上の関数をパラメーターとして受け取る
関数を出力する
例:
def counter(base): def inc(step = 1 ): 非ローカルベース ベース + =ステップ#ベース=ベース+ステップ、ローカル変数を使用しますが、ベースローカル変数はありません。ローカル変数ではないとして宣言された非ローカルベースを使用する必要があります。見つけ、形成された閉鎖 リターンベース 戻りINCが F =カウンタ(10 ) 印刷(F()) #の出力 。11 F1 = INCである(5 ) F2 = INCである(5 ) F1 である F2、F1 == F2、ID(F1) 、上記ID上記(F2) #の機能の内容を比較することができない、比較をf1に変換されたメモリアドレスに変換されるF2れる 結果が偽です 「」 ' f1とf2はどちらも内部関数incを指します。counter関数が呼び出されるたびに、スタックピンを作成し、スタックをプッシュして、関数値をスタックの先頭に返す必要があります。その後、counter関数は終了しますが、クロージャーf1はinc関数のメモリアドレスを記録します、毎回新しい関数呼び出しである
ため、f1 f2メモリアドレスが異なるため、関数間で内容を比較できません。暗黙的に変換されて、f1 == f2-> f1はf2であるメモリアドレスを比較します '' '