如何编写实现数字千位空格分隔的Python装饰器?代码问题求助
千位空格分隔装饰器的修正方案
你的代码存在几个关键问题,以下是具体修正点和修正后的代码:
需要调整的内容
- 被装饰函数需返回目标数字:原
test()函数仅定义了变量b,没有返回值,导致装饰器无法获取要处理的数字,需添加return b。 - 内层装饰函数需调用原函数:原代码直接格式化函数对象
func(f'{func:,}')是错误的,应该调用func()获取原函数返回的数字。 - 内层函数需返回处理结果:原内层函数
two()仅赋值给变量a,没有返回处理后的字符串,导致调用test()得不到输出。 - (可选)支持带参数的函数:如果需要装饰器适配接收参数的函数,可以让内层函数接受任意参数并传递给原函数。
基础修正版代码
def one(func): def two(): num = func() # 获取原函数返回的数字 return f'{num:,}'.replace(',', ' ') # 格式化并替换逗号为空格 return two @one def test(): b = 1000 return b # 返回需要处理的数字 # 测试调用 print(test()) # 输出: 1 000
支持参数的进阶版代码
如果需要装饰能接收数字参数的函数,可修改为:
def one(func): def two(*args, **kwargs): num = func(*args, **kwargs) return f'{num:,}'.replace(',', ' ') return two @one def get_formatted_num(num): return num print(get_formatted_num(1000000)) # 输出: 1 000 000
内容的提问来源于stack exchange,提问作者shbidibom
相关产品推荐
相关产品推荐

