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

如何高效实现Python脚本中函数执行的选择逻辑?

优化多功能Python脚本的选择逻辑

绝对有更优雅、易维护的方式来替代冗长的if-elif链!当你的功能模块越来越多的时候,字典映射是最常用也最高效的解决方案——它能让代码更整洁,后续新增功能时几乎不用修改核心逻辑。

基础实现:用字典映射函数

首先,把你的功能函数和对应的选择数字直接绑定到字典里,这样就能通过键值对快速定位要执行的函数:

# 导入各个功能模块的函数
from instagram_downloader import instagram_downloader
from clean_downloads import clean_downloads

# 创建动作映射字典:键是选择数字,值是对应的函数
action_map = {
    1: instagram_downloader,
    2: clean_downloads
}

# 获取用户输入
action = int(input("请选择要执行的功能(1: 下载Ins视频,2: 清理下载文件夹):"))

# 执行选择的功能,同时处理无效输入
if action in action_map:
    action_map[action]()
    print("Done")
else:
    print("无效的选择,请输入正确的数字!")

进阶:支持带参数的功能

如果有些功能需要传入额外参数,你可以把字典的值改成包含函数和参数的元组,执行时解包参数即可:

# 假设clean_downloads需要一个「保留文件天数」的参数
action_map = {
    1: (instagram_downloader, ()),  # 无参数的函数,传空元组
    2: (clean_downloads, (7,))      # 传入保留7天的参数
}

action = int(input("请选择功能编号:"))

selected_item = action_map.get(action)
if selected_item:
    func, args = selected_item
    func(*args)
    print("Done")
else:
    print("无效的选择,请输入正确的数字!")

更友好的动态菜单

如果想让菜单自动随功能更新,还可以把字典设计得更丰富,包含功能描述,然后动态生成菜单选项——这样新增功能时,只需要往字典里加条目就行,菜单代码完全不用改:

action_map = {
    1: {
        "func": instagram_downloader,
        "description": "下载Instagram视频"
    },
    2: {
        "func": clean_downloads,
        "description": "清理下载文件夹(保留7天内文件)"
    }
}

# 动态打印菜单
print("=== 功能选择菜单 ===")
for key, info in action_map.items():
    print(f"{key}. {info['description']}")

action = int(input("请输入功能编号:"))

selected_info = action_map.get(action)
if selected_info:
    selected_info["func"]()
    print("Done")
else:
    print("无效的选择,请重新输入!")

这种方式的好处在于:

  • 代码结构清晰,避免了一堆嵌套的if-elif
  • 新增功能只需要在字典里添加新的键值对,不需要修改判断逻辑
  • 便于维护和扩展,后续甚至可以把功能配置放到外部文件(比如JSON)里,实现更灵活的功能管理

内容的提问来源于stack exchange,提问作者Omer Hershkovitz

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 15:23:11