You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将处理句子列表的重复Python代码封装为可获取index的函数

解决方案

方案1:使用回调函数传递额外逻辑

把需要用到index的额外逻辑封装为回调函数,作为可选参数传入公共处理函数,在匹配到关键词的位置触发回调,把当前index、已生成的keyword_dict等所需变量都传递到回调中使用。

封装后的公共函数

def process_sentences(sentences, complete_keyword_list, after_match_callback=None):
    keyword_dict = dict()
    for index, sentence in enumerate(sentences):
        keyword_set_inside_dict = set()
        for each_keyword in complete_keyword_list:
            if each_keyword in sentence:
                keyword_set_inside_dict.add(each_keyword)
                keyword_dict[sentence] = keyword_set_inside_dict
                # 传入回调则执行额外逻辑
                if after_match_callback:
                    after_match_callback(index, keyword_dict)
    return keyword_dict

调用示例

audio_nested_dictionary = dict()
if not audio_keyword_dictionary:
    # 无额外逻辑直接调用
    keyword_dict = process_sentences(sentences, complete_keyword_list)
    for key, value in keyword_dict.items():
        print(f'{value} - {key}\n')
else:
    # 定义需要用到index的额外逻辑
    def handle_match(index, current_keyword_dict):
        # 新增index>0判断避免取到列表末尾元素
        if index > 0:
            for each_value in audio_keyword_dictionary.values():
                if each_value in sentences[index - 1] and sentences[index - 1] != '':
                    audio_nested_dictionary[each_value] = current_keyword_dict
    # 传入回调调用
    process_sentences(sentences, complete_keyword_list, after_match_callback=handle_match)
    # 打印结果
    for k, v in audio_nested_dictionary.items():
        for key, value in v.items():
            print(f'{k} - {value} {key}\n')

方案2:使用生成器返回中间状态

把公共处理函数改成生成器,每次匹配到关键词就抛出当前的index和中间状态,在外层调用时接收这些值处理额外逻辑,无需传入回调。

封装后的生成器函数

def iterate_sentences(sentences, complete_keyword_list):
    keyword_dict = dict()
    for index, sentence in enumerate(sentences):
        keyword_set_inside_dict = set()
        for each_keyword in complete_keyword_list:
            if each_keyword in sentence:
                keyword_set_inside_dict.add(each_keyword)
                keyword_dict[sentence] = keyword_set_inside_dict
                # 抛出当前迭代的中间状态
                yield index, keyword_dict
    # 迭代结束抛出最终的keyword_dict
    yield None, keyword_dict

调用示例

if not audio_keyword_dictionary:
    # 取最后抛出的最终keyword_dict即可
    *_, (_, keyword_dict) = iterate_sentences(sentences, complete_keyword_list)
    for key, value in keyword_dict.items():
        print(f'{value} - {key}\n')
else:
    audio_nested_dictionary = dict()
    for index, current_keyword_dict in iterate_sentences(sentences, complete_keyword_list):
        if index is None:
            break
        if index > 0:
            for each_value in audio_keyword_dictionary.values():
                if each_value in sentences[index - 1] and sentences[index - 1] != '':
                    audio_nested_dictionary[each_value] = current_keyword_dict
    # 打印结果
    for k, v in audio_nested_dictionary.items():
        for key, value in v.items():
            print(f'{k} - {value} {key}\n')

注意事项

  • 原代码未判断index是否为0,index-1会取到列表末尾元素,建议新增index > 0的判断避免逻辑错误
  • 原自行封装的函数依赖全局变量complete_keyword_list,修改后改为通过参数传递,降低代码耦合

内容的提问来源于stack exchange,提问作者Laila Campos

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 13:15:03