首页 > 解决方案 > 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”?

标签: python

解决方案


推荐阅读