在Python中翻转函数的参数顺序

2024-04-25 04:24:38 发布

您现在位置:Python中文网/ 问答频道 /正文

现在,我开始学习haskell,在我学习haskell的同时,我尝试用Python实现从haskell学到的一些思想。但是,我发现这个很有挑战性。您可以用Haskell编写一个函数,该函数接受另一个函数作为参数,并返回同一个函数的参数顺序颠倒。在Python中可以做类似的事情吗?例如

def divide(a,b):
    return a / b

new_divide = flip(divide)

# new_divide is now a function that returns second argument divided by first argument

你能用Python做这个吗?在


Tags: 函数new参数return顺序ishaskelldef
2条回答

纯功能风格:

flip = lambda f: lambda *a: f(*reversed(a))

def divide(a, b):
    return a / b

print flip(divide)(3.0, 1.0)

一个更有趣的例子:

^{pr2}$

可以使用嵌套函数定义在Python中创建闭包。这允许您创建一个新函数,该函数将反转参数顺序,然后调用原始函数:

>>> from functools import wraps
>>> 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

>>> def divide(a, b):
        return a / b

>>> new_divide = flip(divide)
>>> new_divide(30.0, 10.0)
0.3333333333333333

相关问题 更多 >