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

做视频网站如何赚钱商标注册证号查询官网

做视频网站如何赚钱,商标注册证号查询官网,乐陵森林面积,厦门做网站企业Python Decorators II: Decorator ArgumentsOctober 19, 2008(本文是(Python3之模式和用法)一书的章节节选第二部分#xff0c;点击阅读第一部分)回顾#xff1a;不含参数的decorators在前文中#xff0c;我介绍了如何使用不含参数的decorators#xff0c;并使用类来实现。…Python Decorators II: Decorator ArgumentsOctober 19, 2008(本文是(Python3之模式和用法)一书的章节节选第二部分点击阅读第一部分)回顾不含参数的decorators在前文中我介绍了如何使用不含参数的decorators并使用类来实现。因为我发现这样做更容易接受。如果创建了一个无参decorator被decorated的函数被传至构造器每次调用decorated函数时就会调用__call__()方法class decoratorWithoutArguments(object):def __init__(self, f):If there are no decorator arguments, the functionto be decorated is passed to the constructor.print Inside __init__()self.f fdef __call__(self, *args):The __call__ method is not called until thedecorated function is called.print Inside __call__()self.f(*args)print After self.f(*args)decoratorWithoutArgumentsdef sayHello(a1, a2, a3, a4):print sayHello arguments:, a1, a2, a3, a4print After decorationprint Preparing to call sayHello()sayHello(say, hello, argument, list)print After first sayHello() callsayHello(a, different, set of, arguments)print After second sayHello() calldecorated函数的所有参数会被传至__call__()。输出结果是Inside __init__()After decorationPreparing to call sayHello()Inside __call__()sayHello arguments: say hello argument listAfter self.f(*args)After first sayHello() callInside __call__()sayHello arguments: a different set of argumentsAfter self.f(*args)After second sayHello() call注意__init__()是唯一一个被调用执行decoration的方法每次调用decorated的sayHello()时就会调用__call__()。含有参数的decorators现在让我们来修改上面的代码看看向decorator加入参数后结果是什么。class decoratorWithArguments(object):def __init__(self, arg1, arg2, arg3):If there are decorator arguments, the functionto be decorated is not passed to the constructor!print Inside __init__()self.arg1 arg1self.arg2 arg2self.arg3 arg3def __call__(self, f):If there are decorator arguments, __call__() is only calledonce, as part of the decoration process! You can only giveit a single argument, which is the function object.print Inside __call__()def wrapped_f(*args):print Inside wrapped_f()print Decorator arguments:, self.arg1, self.arg2, self.arg3f(*args)print After f(*args)return wrapped_fdecoratorWithArguments(hello, world, 42)def sayHello(a1, a2, a3, a4):print sayHello arguments:, a1, a2, a3, a4print After decorationprint Preparing to call sayHello()sayHello(say, hello, argument, list)print after first sayHello() callsayHello(a, different, set of, arguments)print after second sayHello() call从输出结果可以看到加入参数使程序执行发生了很大变化。Inside __init__()Inside __call__()After decorationPreparing to call sayHello()Inside wrapped_f()Decorator arguments: hello world 42sayHello arguments: say hello argument listAfter f(*args)after first sayHello() callInside wrapped_f()Decorator arguments: hello world 42sayHello arguments: a different set of argumentsAfter f(*args)after second sayHello() call现在decoration方法调用构造器然后就马上调用__call__()后者只能包含一个参数(函数对象)且返回替代原有函数的decorated函数对象。注意当前decoration期间__call__()仅被调用一次此后从__call__()返回的decorated函数就可以在实际调用中使用了。虽然这种机制有一定合理性—构造器在这里可获取decorator参数但__call__()对象不能再作为decorated函数使用了。因此你必须使用__call__()执行decoration—可能第一次遇到这种与无参情况截然不同的方式你会比较吃惊何况还必须编写和无参decorator完成不同的代码。含decorator参数的decorator函数最后让我们看一个更复杂一点的decorator函数实现它需要你处理所有细节def decoratorFunctionWithArguments(arg1, arg2, arg3):def wrap(f):print Inside wrap()def wrapped_f(*args):print Inside wrapped_f()print Decorator arguments:, arg1, arg2, arg3f(*args)print After f(*args)return wrapped_freturn wrapdecoratorFunctionWithArguments(hello, world, 42)def sayHello(a1, a2, a3, a4):print sayHello arguments:, a1, a2, a3, a4print After decorationprint Preparing to call sayHello()sayHello(say, hello, argument, list)print after first sayHello() callsayHello(a, different, set of, arguments)print after second sayHello() call输出结果为Inside wrap()After decorationPreparing to call sayHello()Inside wrapped_f()Decorator arguments: hello world 42sayHello arguments: say hello argument listAfter f(*args)after first sayHello() callInside wrapped_f()Decorator arguments: hello world 42sayHello arguments: a different set of argumentsAfter f(*args)after second sayHello() calldecorator函数的返回值必须是一个封装待decorated函数的函数。也就是说Python会保存返回函数然后在decoration期间调用并传递待decorated函数。这也是为何有三层函数的原因里面那个函数才是被替换的。由于闭包wrapped_f()有权访问decorator参数arg1, arg2和arg3而无需像在class版本中那样显式存储它们。然而我也是在这里发现了“显胜于隐(explicit is better than implicit)”。即使该函数版本看起来要更加简洁紧凑但我发现还是类版本容易理解当然也就容易修改和维护。下一节内容在下一节中我会给出decorators的一些实例—基于Python开发的build system—然后在最后一节讨论类decorators。
http://www.yutouwan.com/news/348979/

相关文章:

  • 专业做棋牌网站的金华市金东区建设局网站
  • 菏泽官方网站sem是什么?
  • 做公司网站详细步骤苏州老字号企业官方的网站策划书
  • 什么是网站挂马北京北控京奥建设有限公司网站
  • 招生处网站建设方案如何自己办网站
  • seo站群系统做ppt时网站怎么设计
  • 大石网站建设昆明网站建设方案外包
  • 有限公司网站建设 互成网络地址 四川成都网站制作是什么
  • asp网站制作教程学中文网站
  • 山西做网站的企业php网站插件删除或添加
  • 佛山做推广网站的茂名网站建设维护
  • 用jsp怎么做的购物网站给公司做门户网站多少钱
  • 哪个网站可以免费建站网站开发语言分为几种
  • 电脑网站自适应怎么做制作个人主页
  • 网站首页下拉广告新东方在线教育平台官网
  • 最好的做网站丽水专业做网站
  • 如何查网站是否备案教育培训网站开发
  • 天动力网站开发口碑好的网站建设价格
  • 快速做网站公司哪家专业seo专员工资一般多少
  • 做网站用的腾讯云服务器做服装店网站的素材
  • 专业网站建设市场做商城网站要什么手续费
  • 做自己的网站的一般步骤深圳vi设计公司联系
  • 校园网站的建设作用网页编辑平台
  • 游戏下载网站模板wordpress在线浏览pdf
  • 网站开发属于网络营销外包团队哪些好
  • 西宁制作网站多少钱wordpress 单页导航
  • 建设科技信息+网站建设动画制作物语
  • 中国物流网官方网站域名备案查询最新消息
  • 潢川手机网站建设比百度还强大的搜索引擎
  • 做网站放广告赚钱做网站台式还是笔记本