1
誰かがラムダ関数を作ろうとしており、入力引数以外のラムダ関数のすべてを関数のローカル変数のように扱いたいとします。彼らはどのようにそれを達成するだろうか?変数が「ローカル」であるということは、ラムダ関数の外部からの変数へのアクセスがないことを意味します。lamda関数のローカル変数がPythonで変更されないようにするにはどうしたらいいですか?
コード
right = 5
demo_lamb = lambda left : print("INSIDE LAMB left == ", left, ",", "right == ", right)
for lt in range(0, 5):
demo_lamb(lt)
right = 100*lt + 99
print("OUTSIDE LAMB right == ", right)
印刷出力
INSIDE LAMB left == 0 , right == 5
OUTSIDE LAMB right == 99
INSIDE LAMB left == 1 , right == 99
OUTSIDE LAMB right == 199
INSIDE LAMB left == 2 , right == 199
OUTSIDE LAMB right == 299
INSIDE LAMB left == 3 , right == 299
OUTSIDE LAMB right == 399
INSIDE LAMB left == 4 , right == 399
OUTSIDE LAMB right == 499
所望の出力我々はラムダ関数の内部変数のすべての値を "凍結" するにはどうすればよい
INSIDE LAMB left == 0 , right == 5
OUTSIDE LAMB right == 99
INSIDE LAMB left == 1 , right == 5
OUTSIDE LAMB right == 199
INSIDE LAMB left == 2 , right == 5
OUTSIDE LAMB right == 299
INSIDE LAMB left == 3 , right == 5
OUTSIDE LAMB right == 399
INSIDE LAMB left == 4 , right == 5
OUTSIDE LAMB right == 499
(除きます入力引数)は、ラムダ関数が作成されたときのものと同じになりますか? copy
のインポートとcopy.deepcopy(right)
とラムダ関数内right
を交換
ソリューション失敗しました
変数をラムダ関数にバインドする必要があります。 –
'some_var = lambda'を使用している場合は、最初に 'lambda'を使用すべきではありません。' lambda'が匿名であるという利点**を打ち消します。 –
そして、問題は 'right'はローカル変数ではなく、関数上で閉じた*フリー変数です。問題は、Pythonに字句的スコープがあることです。したがって、 'right'は常にグローバルスコープの' right'を指します。一番良いことは、それをパラメータにすることです。また、これは 'lambda'関数とは関係ありませんが、**すべての関数はこのように動作します** –