Python 如何在闭包中使用变量的副本

Python 如何在闭包中使用变量的副本,python,closures,Python,Closures,在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_wit

在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\u的每个实例调用最后一个函数,即
My\u函数[My\u函数名[-1]]
,因为变量fun是一个引用

我尝试使用
fun=copy.deepcopy(我的函数[fun\u name])
,但它没有改变任何东西,可能不是最好或最快的方法。

尝试以下方法:

my_functions_with_parameters = []
for fun_name in my_function_names:
    fun = my_functions[fun_name]
    my_functions_with_parameters.append(fun)
现在,您可以在
my\u函数中为每个
fun
提供参数,并在循环时使用这些参数

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])