Python中如何动态调整函数调用参数并过滤指定值?
问题描述
我编写了如下Python代码:
def myFun(**kwargs): for key, value in kwargs.items(): print("%s = %s" % (key, value)) # Driver code a = input("Enter first word") b = input("Enter second word") c = input("Enter third word") d = input("Enter fourth word") e = input("Enter fifth word") myFun(first=a, second=b, third=c, fourth=d, fifth=e)
这段代码从用户处获取5个变量作为输入并打印。现在需要实现:若用户输入指定词汇(例如'Hello',这类词汇可存在多个),则该参数不应被传入函数调用。比如第三个输入为'Hello'时,函数调用应为myFun(first=a, second=b, fourth=d, fifth=e);第三和第五个输入均为'Hello'时,调用应为myFun(first=a, second=b, fourth=d)。
注意无法修改函数定义,不想用多条件分支编写函数调用,求更优方案。
优化方案
可以通过字典存储参数、过滤无效项后解包传入的方式实现,无需大量条件判断,代码更简洁易维护:
- 定义排除词汇集合:把需要过滤的词汇放在集合里,方便后续扩展多个词汇
- 整合参数与输入:将所有参数名和对应的用户输入整理成一个字典
- 过滤无效参数:移除字典中值属于排除词汇的键值对
- 解包字典调用函数:用
**操作符将过滤后的字典作为关键字参数传入函数
示例代码:
def myFun(**kwargs): for key, value in kwargs.items(): print("%s = %s" % (key, value)) # 定义需要排除的词汇,可添加多个 EXCLUDED_WORDS = {'Hello'} # 获取输入并整理为参数字典 params = { 'first': input("Enter first word"), 'second': input("Enter second word"), 'third': input("Enter third word"), 'fourth': input("Enter fourth word"), 'fifth': input("Enter fifth word") } # 过滤掉值在排除集合中的参数 filtered_params = {key: val for key, val in params.items() if val not in EXCLUDED_WORDS} # 调用函数 myFun(**filtered_params)
方案优势
- 避免了繁琐的多条件分支,代码结构更清晰
- 排除词汇可灵活扩展,比如要排除'Hello'和'World',只需修改
EXCLUDED_WORDS = {'Hello', 'World'} - 参数与输入的对应关系一目了然,后续增减参数时只需修改
params字典即可
内容的提问来源于stack exchange,提问作者Anshul Gupta
相关产品推荐
相关产品推荐

