如何编写支持用户输入的Python文本格式函数装饰器
改造方法
原有代码无法支持用户输入的核心原因是:装饰器的内部包装函数、被装饰的文本获取函数都没有设计参数接收逻辑,只能返回硬编码的固定字符串。改造分两步完成:
- 给所有装饰器的
wrapper函数增加可变参数透传能力,让装饰器可以适配带参数的被装饰函数 - 修改被装饰函数,使其支持接收外部传入的文本内容,而非返回固定值;调用时将用户输入的内容作为参数传入即可
改造后完整代码
def bold(fn): def wrapper(*args, **kwargs): return "<b>" + fn(*args, **kwargs) + "</b>" return wrapper def italic(fn): def wrapper(*args, **kwargs): return "<i>" + fn(*args, **kwargs) + "</i>" return wrapper def underline(fn): def wrapper(*args, **kwargs): return "<u>" + fn(*args, **kwargs) + "</u>" return wrapper @bold @italic @underline def get_text(content): return content # 获取用户输入 user_input = input("请输入需要格式化的文本内容:") # 传入用户输入并输出格式化结果 print(get_text(user_input))
效果说明
- 装饰器的执行顺序和原有逻辑完全一致,最终输出的HTML标签嵌套结构为
<b><i><u>用户输入的内容</u></i></b> - 改造后的装饰器通用性更强,后续不管给被装饰函数传什么参数都能正常透传,不会出现参数不匹配的报错
- 如果需要支持用户自主选择要叠加的文本格式,可以额外增加格式选择交互逻辑,根据用户选择动态给函数叠加对应装饰器即可
内容的提问来源于stack exchange,提问作者combichirst
相关产品推荐
相关产品推荐

