python - python:动态创建函数
问题描述
我很难在 python 中动态创建函数。假设我有 2 个字典,dict_1 和 dict_2,并且我正在遍历字典以创建基于单个元素(1、2、3、7、8、9)的函数。每个函数都应该是唯一的,并且应该能够在调用时打印唯一的输出。然后将独特的功能添加到存储所有功能的字典中。但是,当执行下面的代码时,打印输出都是一样的。
dict_1 = [1, 2, 3]
dict_2 = [7, 8, 9]
def create_functions_dict():
count = 1
functions_dict = dict()
for a in dict_1:
var_one = a
for b in dict_2:
var_two = b
def new_dynamic_func():
print (var_one, var_two)
return
name = "function" + str(count)
functions_dict[name] = new_dynamic_func
count += 1
return functions_dict
dict_of_functions = create_functions_dict()
print (dict_of_functions)
当上面的代码执行时,这是下面的输出,证明函数是唯一的?
{'function1': <function create_functions_dict.<locals>.new_dynamic_func at 0x00000214D54343A0>, 'function2': <function create_functions_dict.<locals>.new_dynamic_func at 0x00000214D54D7DC0>, 'function3': <function create_functions_dict.<locals>.new_dynamic_func at 0x00000214D7413160>, 'function4': <function create_functions_dict.<locals>.new_dynamic_func at 0x00000214D7413280>, 'function5': <function create_functions_dict.<locals>.new_dynamic_func at 0x00000214D7413310>, 'function6': <function create_functions_dict.<locals>.new_dynamic_func at 0x00000214D74133A0>, 'function7': <function create_functions_dict.<locals>.new_dynamic_func at 0x00000214D7413430>, 'function8': <function create_functions_dict.<locals>.new_dynamic_func at 0x00000214D74134C0>, 'function9': <function create_functions_dict.<locals>.new_dynamic_func at 0x00000214D7413550>}
但是,当执行以下代码时,输出显示所有功能都相同
for i in dict_of_functions:
function = dict_of_functions[i]
print (function())
代码输出
3 9
None
3 9
None
3 9
None
3 9
None
3 9
None
3 9
None
3 9
None
3 9
None
3 9
None
如何让 for 循环中发出的变量保留在函数字典中?即,如何使输出打印为“1, 7”、“1, 8”、“1, 9”、“2, 7”、“2, 8”、“2, 9”、“3, 7”、“3、8”、“3、9”?