封装一个函数,实现函数柯里化
时间: 2024-05-05 07:19:48 浏览: 102
ES6如何用一句代码实现函数的柯里化
好的,我可以为您提供一个柯里化函数的实现。
柯里化(currying)是一种将接受多个参数的函数转换成接受单个参数(第一个参数)并且返回一个新函数的过程。新函数接受余下的参数并返回结果。以下是一个实现柯里化的函数:
```python
def curry(func):
def curried(*args, **kwargs):
if len(args) + len(kwargs) >= func.__code__.co_argcount:
return func(*args, **kwargs)
return (lambda *args2, **kwargs2:
curried(*(args + args2), **dict(kwargs, **kwargs2)))
return curried
```
这个函数接受一个函数作为参数,并返回一个新函数。新函数可以被多次调用,每次调用只接受一个参数,直到所有参数都被传递完毕,然后返回最终结果。例如:
```python
@curry
def add(a, b, c):
return a + b + c
print(add(1)(2)(3)) # 输出 6
print(add(1, 2)(3)) # 输出 6
print(add(1)(2, 3)) # 输出 6
print(add(1, 2, 3)) # 输出 6
```
这个例子展示了如何使用 `curry` 函数来实现柯里化。我们可以使用 `@curry` 装饰器来将 `add` 函数转换成柯里化函数,然后可以像上面的例子一样调用它。
阅读全文