python - 如何返回带有向后参数的新函数

标签 python function decorator args

我想用 Python 编写一个函数。给定一个函数,返回一个新函数,该函数反向运行原始函数。
例如输入函数funcpow , 所以 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/

相关文章:

python - python类继承的基本用法

r - 函数内 ddply 未找到对象错误

python:常规方法和类方法之间的混合

Python:使用装饰器修改函数的内部行为

javascript - Selenium:输入样式为 ="display: none;"的文本字段

python - Django - 获取每个查询结果的最新记录

python - 使用列表中的索引替换字符串中的每个字符

计算字符串中的字符 (C) - 问题

c++ - 在 C++ 中查找字符数组的长度

来自链式调用的 Python 装饰器