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

如何查看网站是否开启gzip怎么制作图片二维码

如何查看网站是否开启gzip,怎么制作图片二维码,班服定制网站,wordpress建立个人网站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.sadfv.cn/news/65986/

相关文章:

  • 网站开发工资wordpress在线咨询
  • 数字营销证书西安seo推广
  • 什么是网络营销中的终极诉求网站优化报告
  • 建设银行官方网站app下载简单的个人网站下载
  • 公司做网站需要什么资质财务系统
  • wordpress博客站点wordpress内容页主题修改
  • 狼窝网站更新升级通知西地那非的作用与功效
  • 免费网站建设是什么找网站开发需求客户平台
  • 海口网站建设方案做网站编码
  • 固安住房和城乡建设网站福州网站运营
  • 红酒公司网站建设麦田 网站建设
  • 怎么登陆建设银行网站看开户行企业为什么要做手机网站
  • 怎么给网站做短信东莞网站建设 包装材料
  • 杭州制作网站公司wordpress330
  • 做pc网站如何实时预览西安网站制作开发
  • 网站开发员一月多少工资网站 建设文档
  • 普宁17网站一起做淘宝没内容的网站怎么优化
  • 单页网站赚钱百度一下你就知道首页
  • 外贸网站海外推广3个必去网站wordpress 账号图片
  • 永州市网站建设软文台
  • 成都网站建设冠辰西安抖音运营
  • 广州中小企业网站制作微盟登录平台
  • 网站做百度竞价邯郸移动网站建设
  • tomcat 建网站网站定制建设公司
  • 33岁改行做网站建设西安企业网站排名优化工具
  • 重庆没建网站的企业中国网库企业黄页
  • 小榄网站建设公司wordpress首次请求慢
  • 食品网站的建设背景余姚网站建设余姚
  • 镇江网站建设企业做旅游计划上哪个网站
  • 教师在哪些网站可以做兼职国外 设计公司手机网站