写点什么

Python 代码阅读(第 45 篇):柯里化

用户头像
Felix
关注
发布于: 刚刚
Python代码阅读(第45篇):柯里化

Python 代码阅读合集介绍:为什么不推荐Python初学者直接看项目源码


本篇阅读的代码实现了将函数柯里化的功能。


在计算机科学中,柯里化(英语:Currying),又译为卡瑞化或加里化,是把接受多个参数的函数变换成接受一个单一参数(最初函数的第一个参数)的函数,并且返回接受余下的参数而且返回结果的新函数的技术。


本篇阅读的代码片段来自于30-seconds-of-python

curry

from functools import partial
def curry(fn, *args): return partial(fn,*args)
# EXAMPLESadd = lambda x, y: x + yadd10 = curry(add, 10)
add10(20) # 30
复制代码


curry函数接收一个接受多个参数的初始函数和部分参数,返回接受单一参数的函数。


函数使用functools.partial()生成一个部分对象。该部分对象被调用时的行为类似于fn给定了部分参数被调用,需要提供剩余参数。


在直觉上,柯里化声称“如果你固定某些参数,你将得到接受余下参数的一个函数”。所以对于有两个变量的函数x+y,如果固定了y=2,则得到有一个变量的函数x+2


functools.partial(func, /, *args, **keywords)返回一个新的 部分对象,当被调用时其行为类似于 func 附带位置参数args和关键字参数keywords被调用。 如果为调用提供了更多的参数,它们会被附加到args。 如果提供了额外的关键字参数,它们会扩展并重载keywords。 大致等价于:


def partial(func, /, *args, **keywords):  def newfunc(*fargs, **fkeywords):    newkeywords = {**keywords, **fkeywords}    return func(*args, *fargs, **newkeywords)  newfunc.func = func  newfunc.args = args  newfunc.keywords = keywords  return newfunc
复制代码


发布于: 刚刚阅读数: 2
用户头像

Felix

关注

没有看点,仅仅闲聊。欢迎关注“没看点” 2018.05.04 加入

欢迎关注个人公众号:没看点 个人主页:www.zhangfelix.com

评论

发布
暂无评论
Python代码阅读(第45篇):柯里化