MST

星途 面试题库

面试题:Python中结合位置实参和任意数量实参的性能优化与设计

设计一个Python模块,模块中包含一个函数,该函数接受一个位置实参作为数据处理规则的标识符,接受任意数量的复杂数据结构(如嵌套字典、列表等)作为实参。根据不同的处理规则标识符,对传入的任意数量数据进行相应处理。要求在处理大量数据时,该函数性能良好,并且具备扩展性,易于添加新的数据处理规则。请阐述你的设计思路,并给出核心代码实现。
49.5万 热度难度
编程语言Python

知识考点

AI 面试

面试题答案

一键面试

设计思路

  1. 函数参数设计:使用一个位置参数作为数据处理规则的标识符,使用*args来接受任意数量的复杂数据结构实参。
  2. 处理规则映射:通过字典将处理规则标识符映射到对应的处理函数,这样易于添加新的处理规则,符合扩展性要求。
  3. 性能优化:在具体的处理函数中,尽量使用高效的Python数据结构操作和算法,避免不必要的循环嵌套等操作。

核心代码实现

# 定义具体的数据处理函数
def process_data_type1(data):
    result = []
    for item in data:
        if isinstance(item, dict):
            for key, value in item.items():
                if isinstance(value, list):
                    result.extend(value)
    return result


def process_data_type2(data):
    new_data = []
    for item in data:
        if isinstance(item, list):
            new_data.append(len(item))
    return new_data


# 定义主函数,根据标识符调用相应处理函数
def process_data(rule_identifier, *args):
    rule_mapping = {
        'type1': process_data_type1,
        'type2': process_data_type2
    }
    if rule_identifier not in rule_mapping:
        raise ValueError(f"Unsupported rule identifier: {rule_identifier}")
    all_results = []
    for data in args:
        result = rule_mapping[rule_identifier](data)
        all_results.append(result)
    return all_results

可以这样调用函数:

data1 = [{"key1": [1, 2, 3]}, {"key2": [4, 5]}]
data2 = [[1, 2], [3, 4, 5]]
result = process_data('type1', data1, data2)
print(result)
result = process_data('type2', data1, data2)
print(result)