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

如何通过用户输入调用自定义函数?寻求替代多if语句的映射实现方法

实现输入与自定义函数的关联映射(替代大量if语句)

当然可行!这在Python里是非常常见的代码优化方式,用字典映射就能完美实现你想要的类似Excel VLOOKUP的关联效果,彻底摆脱冗长的if-elif链,让代码更简洁、易维护。

核心思路

Python中函数是一等对象,你可以直接把函数作为字典的值,将输入字符串(比如"phone"、"customer")作为字典的键,这样就能通过输入直接找到对应的函数并调用。

改造后的完整代码示例

# 自定义函数集合
def retrieve_phone_data(): 
    # 模拟业务逻辑
    return ["iPhone 14", "Samsung Galaxy S23", "Google Pixel 7"]

def retrieve_customer_data(): 
    # 模拟业务逻辑
    return {"customer_id": 1001, "name": "Alice Smith", "email": "alice@example.com"}

def retrieve_order_data():
    # 新增的函数,直接在映射里添加即可
    return [{"order_id": 2001, "product": "iPhone 14", "amount": 899}]

def retrieve_inventory_data():
    # 再新增一个函数
    return {"iPhone 14": 50, "Samsung Galaxy S23": 30}

# 关键:创建输入与函数的映射字典
function_mapping = {
    "phone": retrieve_phone_data,
    "customer": retrieve_customer_data,
    "order": retrieve_order_data,
    "inventory": retrieve_inventory_data
}

def main(input1, input2):
    # 获取所有有效输入选项
    valid_inputs = list(function_mapping.keys())
    
    # 检查两个输入是否都有效
    if input1 in valid_inputs and input2 in valid_inputs:
        # 通过映射调用对应函数,并获取返回结果
        data1 = function_mapping[input1]()
        data2 = function_mapping[input2]()
        
        # 这里可以根据需求处理返回结果,比如打印、存储等
        print(f"Retrieved {input1} data:\n{data1}")
        print(f"\nRetrieved {input2} data:\n{data2}")
    else:
        print(f"Error: Please enter valid input. Valid options are: {', '.join(valid_inputs)}")

# 测试调用
if __name__ == "__main__":
    # 有效输入测试
    main("phone", "customer")
    # 无效输入测试
    # main("phone", "invalid_input")

优势说明

  • 扩展性极强:新增函数时,只需要在function_mapping字典里添加一行键值对,完全不需要修改main函数的逻辑。
  • 代码更简洁:10多个函数的情况下,用字典映射比写10多段if-elif代码清爽太多,可读性更高。
  • 易维护:输入与函数的对应关系集中在字典里,后续修改或调整关联逻辑非常方便。

额外扩展:支持任意数量的输入

如果后续需要支持1个或多个输入的组合,只需要稍微调整main函数即可:

def main(*inputs):
    valid_inputs = list(function_mapping.keys())
    invalid_inputs = [inp for inp in inputs if inp not in valid_inputs]
    
    if invalid_inputs:
        print(f"Error: Invalid input(s): {', '.join(invalid_inputs)}. Valid options are: {', '.join(valid_inputs)}")
        return
    
    # 遍历所有输入,调用对应函数
    for inp in inputs:
        data = function_mapping[inp]()
        print(f"\nRetrieved {inp} data:\n{data}")

# 调用示例:支持1个、2个或多个输入
main("phone")
main("customer", "order", "inventory")

内容的提问来源于stack exchange,提问作者The Crow

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 16:12:35