python - 如何在闭包中使用变量的副本
问题描述
在 python 中,我可以使用nonlocal
关键字来确保使用外部作用域中的变量,但是如何将变量从外部作用域复制到闭包中?
我有这样的代码:
my_functions_with_parameters = []
for fun_name in my_function_names:
fun = my_functions[fun_name]
def fun_with_parameters():
return fun(1,2,3)
my_functions_with_parameters.append(fun_with_parameter)
我的问题是,每个实例都fun_with_parameters
调用最后一个函数,即 ,my_functions[my_function_names[-1]]
因为变量 fun 是一个引用。
我尝试使用fun = copy.deepcopy(my_functions[fun_name])
,但它没有改变任何东西,可能不是最好或最快的方法。
解决方案
试试这个:
my_functions_with_parameters = []
for fun_name in my_function_names:
fun = my_functions[fun_name]
my_functions_with_parameters.append(fun)
现在,您可以在遍历它们时为每个fun
in提供参数:my_functions_with_parameters
for my_fun in my_functions_with_parameters:
my_fun(1,2,3)
或者您可以将参数与函数一起存储在元组中:
my_functions_with_parameters = []
for fun_name in my_function_names:
fun = my_functions[fun_name]
my_functions_with_parameters.append((fun, 1, 2, 3))
并通过以下方式致电:
for tup in my_functions_with_parameters:
tup[0](tup[1], tup[2], tup[3])
推荐阅读
- python - 不同机器python代码上的不同输出
- yaml - Yaml / Puppet - 仅使用 yaml 配置中的名称服务器获取接口名称
- c# - 从绑定到 DataGridView 的对象列表中捕获异常
- git - 嗨,我一直在尝试重新爱,但做不到,在我知道一些基本命令之前,我从头开始使用 GIT
- gitlab - 在 gitlab CI 中读写文件
- fish - 扩展`ls`函数
- algorithm - CLRS 第 3 版算法简介中提到的红黑删除算法的问题
- django-rest-framework - Django rest框架中Viewsets的好处
- reactjs - Jest 测试在 tsx 语法上失败
- mongodb - 通过 Mongo 聚合管道将对象数组中的字段相乘