我想用 Python 编写一个函数。给定一个函数,返回一个新函数,该函数反向运行原始函数。
例如输入函数func
是 pow
, 所以 func(2, 3) = 8. 返回的新函数会做 pow(3,2) = 9。
我在另一个 post 中找到了这个解决方案
def flip(func):
'Create a new function from the original with the arguments reversed'
@wraps(func)
def newfunc(*args):
return func(*args[::-1])
return newfunc
有没有办法在没有
@wrap
的情况下做到这一点? ?参数的数量未知。它可以是任何类型:int
, string
.所以我想要的函数只接受一个参数,即原始函数的名称。reverse_args(f)
调用时, *args 将遵循:
reverse_args(func)(*args)
最佳答案
如果这是您唯一的疑问:@wraps
不需要装饰器。
它所做的是向它标记的包装函数添加一些元数据,以便它更类似于它包装的原始函数。一方面,它会覆盖包装器(在本例中为 newfunc
)__name__
属性,使其在打印时看起来与原始属性相同,或者如果是 repr
被看到。
反转参数序列的是 args[::-1]
部分,以及 *
运算符,它将参数分发回来。
关于python - 如何返回带有向后参数的新函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52524474/