>假设有人想要创建一个lambda函数,并且他们希望lambda函数中的所有内容(输入参数除外)都被视为函数的局部变量。他们将如何实现这一目标?通过说变量是"局部的",我的意思是无法从 lambda 函数外部访问这些变量。
法典
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
我们如何将 lambda 函数内所有变量(输入参数除外)的值"冻结"为创建 lambda 函数时的值?
一个失败的解决方案
导入 copy
并将 lambda 函数内的right
替换为 copy.deepcopy(right)
对输出没有任何影响。
通常的技巧,可以追溯到引入闭包之前,是使用"可选参数":
demo_lamb = lambda left, right=right: print("INSIDE LAMB left == ", left, ",", "right == ", right)
定义函数时会计算默认参数,这正是您想要的。