【发布时间】:2017-08-20 05:11:52
【问题描述】:
我想使用装饰器将字符串格式的数字转换为 int/float 值,这就是我的尝试
def str_to_int(func):
"""
This wrapper converts string value into integer
"""
def wrapper(*args, **kwargs):
for arg in args:
arg = int(arg)
return func(*args, **kwargs)
return wrapper
@str_to_int
def number_as_string(a, b, c):
return a,b,c
print (number_as_string('1', '2', '3'))
输出
('1', '2', '3')
但是,我想要像下面这样的东西
(1, 2, 3)
上面的输出我可以用下面的代码生成
def str_to_int(func):
"""
This wrapper converts string value into integer
"""
def wrapper(x, y, z):
return int(x), int(y), int(z)
return wrapper
@str_to_int
def number_as_string(a, b, c):
return a,b,c
print (number_as_string('1', '2', '3'))
但是上面的代码首先破坏了使用装饰器的目的,因为我想转换字符串值而不管原始函数的参数。
任何人都可以建议第一个程序有什么问题以及如何解决它。
【问题讨论】:
-
您没有在第一个示例中更改
args。在循环中更改arg不会做任何事情,除了使arg成为int。您需要建立一个新的args列表并将其传递给func或者您可以执行return func(*map(int, args), **kwargs) -
谢谢,成功了!!
-
你明白它为什么有效吗?为什么您的原始代码不起作用?
-
我部分理解了,我想如果我将每个 arg 更改为 int,那么新的 args 将是 int。你能解释一下吗?
标签: python decorator python-decorators