如何将逗号分隔的函数名字符串转换为嵌套函数调用表达式
嵌套函数调用字符串拼接优化方案
你的现有实现思路非常巧妙,通过字符串拼接即可快速得到结果,时间复杂度为O(n),性能表现很好。可以从可读性提升、边界场景兼容两个方向做进一步优化,以下是两种更通用的实现方案:
1. 语义更直观的reduce实现
使用functools.reduce从内到外逐层包裹函数调用,逻辑完全贴合嵌套调用的语义,可读性极强,也天然兼容空函数列表的边界场景:
from functools import reduce functions = 'f1,f2,f3' var = 'hello' func_list = functions.split(',') # 倒序遍历函数列表,每次用当前函数包裹上一层的调用结果 result = reduce(lambda val, func: f"{func}({val})", reversed(func_list), var)
运行结果和你的实现完全一致:f1(f2(f3(hello)))
如果函数列表为空时,会直接返回hello,不会出现语法错误。
2. 兼容低版本Python的实现
如果运行环境为Python3.6以下版本,不支持f-string语法,可以替换为str.format写法,逻辑完全一致:
from functools import reduce functions = 'f1,f2,f3' var = 'hello' func_list = functions.split(',') result = reduce(lambda val, func: "{}({})".format(func, val), reversed(func_list), var)
注意:你原有的写法在
functions为空字符串时,会生成({var}的非法格式,生产环境使用如果存在空函数列表的概率,需要额外加判断处理;如果使用场景可以保证functions永远非空,不需要兼容边界情况,你的原有写法已经是性能最优的选择,没有额外的函数调用开销。
内容的提问来源于stack exchange,提问作者TomNash
相关产品推荐
相关产品推荐

