[解決済み] クロージャ」と「ラムダ」の違いは何ですか?
質問
どなたか説明してください。私はそれらの背後にある基本的な概念を理解していますが、私はしばしばそれらが互換的に使用されているのを見て、私は混乱します。
せっかくだから、普通の関数とどう違うの?
どのように解決するのか?
A ラムダ は単なる無名関数で、名前を付けずに定義された関数のことです。Schemeのようないくつかの言語では、これは名前付き関数と同じである。実際、関数の定義は、内部でラムダを変数に束縛していると書き直される。Pythonのような他の言語では、両者の間に(どちらかといえば不要な)区別があるが、それ以外は同じようにふるまう。
A 閉鎖 は、以下のような任意の関数です。 を閉じる は 環境 で定義されたものです。これは、パラメータリストにない変数にもアクセスできることを意味します。例を挙げます。
def func(): return h
def anotherfunc(h):
return func()
これはエラーの原因となります。
func
は
オーバークローズ
の環境は
anotherfunc
-
h
は未定義です。
func
はグローバル環境に対してのみクローズします。これは動作します。
def anotherfunc(h):
def func(): return h
return func()
だって、ここに。
func
が定義されているのは
anotherfunc
で、python 2.3以上(またはこのような数字)で、それらが
ほとんど
はクロージャを正しく扱えるようになった(突然変異はまだうまくいっていない)ので、これはつまり
閉じる
anotherfunc
の環境にアクセスし、その中の変数にアクセスすることができます。 Python 3.1+では、突然変異は
その
nonlocal
キーワード
.
もう一つの重要なポイント
func
の上に閉じ続けます。
anotherfunc
の環境で評価されなくなったときでも
anotherfunc
. このコードも動作します。
def anotherfunc(h):
def func(): return h
return func
print anotherfunc(10)()
これは10と表示されます。
これは、お気づきのように、何の関係もありません。 ラムダ この2つは(関連してはいるが)異なる概念である。
関連
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン