首页 > 解决方案 > 如何在闭包中使用变量的副本

问题描述

在 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]),但它没有改变任何东西,可能不是最好或最快的方法。

标签: pythonclosures

解决方案


试试这个:

my_functions_with_parameters = []
for fun_name in my_function_names:
    fun = my_functions[fun_name]
    my_functions_with_parameters.append(fun)

现在,您可以在遍历它们时为每个funin提供参数: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])

推荐阅读