在不同的功能中使用同一循环还是在一个循环中使用不同的功能更好?

时间:2018-12-24 18:25:20

标签: python loops optimization

我有一个包含不同成员变量的类,其中一个是字典列表。我必须对该列表执行一些操作,例如:

  • 找到并替换一些元素
  • 向该列表中的某些词典添加新的键值
  • 从该列表中的某些词典中删除一些空键值

最初,我执行不同的功能,其中每个功能在词典(Option1)列表中执行特定任务。然后,我意识到在这些功能的每一个中,我都在相同的列表上执行相同的循环。我认为,如果我在循环中循环一次并完成所有需要在其中完成的任务,将会提高性能。因此,我创建了不同的函数来执行我想在元素级别而不是列表级别执行的操作,如Option2所示。

调用函数也需要一定的开销,所以我的问题是:从性能的角度来看,使用Option1Option2更好吗?编译器将更好地优化哪个选项?从代码可维护性和可读性的角度来看呢?

选项1

def add_status(self):
    for element_dict in self.list_of_dicts:
        element_dict["status"] = function_to_add_status()

def replace_id_with_name(self):
    for element_dict in self.list_of_dicts:
        element_dict["name"] = function_to_get_name()
        element_dict.pop("id")

def remove_empty_elements(self):
    for k, v in list(element_dict.items()):
        if v == "null":
            del element_dict[k]

def clean_up(self):
    self.add_status()
    self.replace_id_with_name()
    self.remove_empty_elements()

选项2

def add_status(element_from_list_of_dicts):
    element_from_list_of_dicts["status"] = function_to_add_status()

def replace_id_with_name(element_from_list_of_dicts):
    element_from_list_of_dicts["name"] = function_to_get_name()
    element_dict.pop("id")

def remove_empty_elements(element_from_list_of_dicts):      
    if element_from_list_of_dicts.item() == "null":
        del element_from_list_of_dicts[k]

def clean_up(self):
    for element_dict in self.list_of_dicts:
        self.add_status(element_dict)
        self.replace_id_with_name(element_dict)
        self.remove_empty_elements(element_dict)

0 个答案:

没有答案