当前位置: 首页 > news >正文

工作室建设与管理思路与设想百度seo找哪里

工作室建设与管理思路与设想,百度seo找哪里,模板之家html5,做视频网站源码柯里化 柯里化的概念:柯里化(Currying)在Python中是一种编程技术,它将原本接受多个参数的函数转换为一系列接受单个参数的函数。这种方法以逻辑学家Haskell Curry的名字命名。 简而言之就是将一次函数调用变成先放入一个参数得到…

柯里化

柯里化的概念:柯里化(Currying)在Python中是一种编程技术,它将原本接受多个参数的函数转换为一系列接受单个参数的函数。这种方法以逻辑学家Haskell Curry的名字命名。

简而言之就是将一次函数调用变成先放入一个参数得到的中间函数对象,然后再对中间函数对象进行传参,这样可以将多参数函数变成多个单参数函数。

def add(x):def inner(y,z):return x+y+zreturn innerprint(add(1)(2,3))

在第一个例子中,我们先将x传入得到一个带有x参数的函数对象,然后再对这个函数对象继续传入y,z两个参数,柯里化的程度是取决于我们的需要的,我们当然也可以将其分成三个函数,如下图

def add(x):def innner(y):def inner_1(z):return x+y+zreturn inner_1return innnerprint(add(1)(2)(3))

 现在,我们对柯里化有了一定了解,但我们该怎么把柯里化和装饰器关联在一起呢?

装饰器

你可以顾名思义,装饰器就是装饰函数用的,函数太单调?我们可以给它加一些功能让它尽可能丰满一些,为了丰富函数,有必要引入柯里化吗,我直接在函数里写不就行了?这就要考虑到代码侵入性问题了,我们将非业务代码(装饰代码)写在函数里,这就产生了业务与非业务代码的纠缠,这不利于后期代码的修改,何况,如果我想为多个函数进行装饰,难道我要一个一个copy过去?这显然不切实际,所以我们运用了函数的思想,把装饰代码封装到一个函数中,然后再将其应用在目标函数上,这实际上是将函数当作参数传入一个函数(高阶函数),而柯里化在其中的作用就是分割,它将装饰函数应用在目标函数然后返回一个装饰过的目标函数,但这个过程不会影响原目标函数,这可能有一些抽象,接下来我们应用实例来说明。

def add(x,y):return x+ydef logger(fn):def wrapper(*args,**kwargs):print("{} function is called. {},{}".format(fn.__name__,args,kwargs))ret = fn(*args,**kwargs)return retreturn wrapperadd = logger(add)

我们定义了一个日志修饰函数,这个修饰器的作用就是说明一下目标函数的使用情况,我们使用柯里化将参数分离,这样我们就能不用传入目标函数的参数了,比如说这个add (x,y),如果不使用柯里化,那我们就要传入x,y的值了,但这不是我们注重的部分,我们的目的是将修饰器应用在目标函数上,至于参数是什么,这不是我们考虑的范畴。所以柯里化其实就是把目标函数的参数与目标函数本身分割开,让我们可以更加关注修饰情况。

 

add = logger(add)

我们看到这行代码,其实柯里化的意图已经明显了,我们始终需要的就是这行代码,至于其他参数我们暂时不考虑,而这行代码在python中也作为语法糖(修饰器的语法)变换了存在形式。

在python中,我们用@来表示修饰函数。

装饰器语法

@标识符

标识符指向一个函数,用一个函数来装饰它下面的函数,logger称为装饰器函数,add称为被装饰或被包装函数

本质上来看,无参数装饰器logger实际上等效为一个参数的函数

无参数装饰器 logger

@logger 会把它下面紧挨着的函数的标识符提上来作为它的实参

如此,我们可以写成:

def logger(fn):def wrapper(*args,**kwargs):print("调用前增强功能")print("{} function is called. {},{}".format(fn.__name__,args,kwargs))ret = fn(*args,**kwargs)print("调用后增强功能")return retreturn wrapper@logger
def add(x,y):return x+y
print(add(1,2))

以上,就是无参装饰器的基本内容,下一篇我们将讨论有参装饰器的使用。

 

 

http://www.yayakq.cn/news/520461/

相关文章:

  • 达州市网站建设三亚新闻发布会直播第十五场
  • 做网站需要的公司找我家是做的视频网站好
  • 浙江中钦建设有限公司网站百度一下电脑版首页
  • 做网站 钱国际新闻界期刊
  • 淘宝网站开发企业网站建设的思路
  • 顺义区做网站岳阳网站建设方案
  • 要想浏览国外网站 应该怎么做威县网站建设
  • dede门户网站模板下载企业网站布局
  • 中国机械加工网站官网成都装饰网站建设
  • 石景山网站建设有哪些公司西安做兼职网站设计
  • 网站排名西安关于学校网站建设
  • 网站 做 app做网站办公照片
  • 网站链接地图是怎么做的汽车销售网站模板 cms
  • 网站转移空间以后ip会变化吗吉安做网站的
  • 湖南新备案的网站柳城 wordpress
  • 建设信基金管理有限公司网站绵阳市建设工程监督网站
  • 阳春做网站便宜网站建设怎么样
  • 什么是网络营销详细点深圳seo外包公司
  • 网站项目计划说明书品牌策划公司哪家好
  • 做垂直类网站廊坊模板网站建设
  • 嘉兴网站设计软件开发中采用结构化生命方法
  • 做网站需要编程?147seo采集工具
  • 社保网站减员申报怎么做北京市住房和城乡建设网站
  • 51zwd做网站精品资料网提供企业管理知识
  • 网站设计和网站建设企业网站建设与实施调查报告
  • 做网站用什么数据库好用有一个做5s壁纸的网站
  • 重庆微网站制作无限个网站虚拟空间
  • 绥德网站建设设计北京网站建设公司电话
  • 四川建设公司网站wordpress怎么分享到微信支付
  • 南通建设局网站新绛做网站