如何使用装饰器修改 *args 的类型?
How can I use a decorator to modify the type of *args?
我想使用 @decorator
让我能够像 args
一样访问 ' - '.join(args)
,如下所示。这可能吗,也许使用元类?
def a(*args):
print(args)
a(1, 2, 3)
# (1, 2, 3)
@magic
def b(*args):
print(args)
b(1, 2, 3)
# 1 - 2 - 3
你可以接近:
def magic(func):
def wrapper(*args):
return func(' - '.join(map(str, args)))
return wrapper
但这会打印出 ('1 - 2 - 3',)
,因为 b
的正文由于 *args
而将 args
视为一个元组,我怀疑装饰器能否解决这个问题.如果 body 是 print(args[1])
的样子,你期望会发生什么?
所以部分问题是您在需要字符串的地方使用了整数,因此请将它们转换为字符串,然后使用连接函数。
def magic(func):
def wrapper(*args):
return ' - '.join(map(str, args))
return wrapper
@magic
def a(*args):
return 'Arguments were {}.'.format(args)
print(a(1, 2, 3))
我想使用 @decorator
让我能够像 args
一样访问 ' - '.join(args)
,如下所示。这可能吗,也许使用元类?
def a(*args):
print(args)
a(1, 2, 3)
# (1, 2, 3)
@magic
def b(*args):
print(args)
b(1, 2, 3)
# 1 - 2 - 3
你可以接近:
def magic(func):
def wrapper(*args):
return func(' - '.join(map(str, args)))
return wrapper
但这会打印出 ('1 - 2 - 3',)
,因为 b
的正文由于 *args
而将 args
视为一个元组,我怀疑装饰器能否解决这个问题.如果 body 是 print(args[1])
的样子,你期望会发生什么?
所以部分问题是您在需要字符串的地方使用了整数,因此请将它们转换为字符串,然后使用连接函数。
def magic(func):
def wrapper(*args):
return ' - '.join(map(str, args))
return wrapper
@magic
def a(*args):
return 'Arguments were {}.'.format(args)
print(a(1, 2, 3))