gpt4 book ai didi

python - 如何防止 lambda 函数局部变量在 python 中更改?

转载 作者:太空宇宙 更新时间:2023-11-03 14:39:23 25 4
gpt4 key购买 nike

假设有人想要创建一个 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并替换 right在 lambda 函数内使用 copy.deepcopy(right)对输出没有任何影响。

最佳答案

通常的技巧可以追溯到闭包引入之前,就是使用“可选参数”:

demo_lamb = lambda left, right=right: print("INSIDE  LAMB left == ", left, ",", "right == ", right)

定义函数时会计算默认参数,这正是您想要的。

关于python - 如何防止 lambda 函数局部变量在 python 中更改?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46653485/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com