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

问题描述 投票:0回答:1

在python中,我可以使用nonlocal关键字来确保使用外部作用域中的变量,但是如何copy从外部作用域中的变量进入闭包?

我有这样的代码:

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

python closures
1个回答
0
投票

尝试以下方法:

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

现在您可以在遍历它们时为fun中的每个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])
© www.soinside.com 2019 - 2024. All rights reserved.