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

学做莱网站网站知识架构

学做莱网站,网站知识架构,聊城网站建设策划建设公司,德州谁会做网站本章内容: Python 如何计算装饰器句法 Python 如何判断变量是不是局部的 闭包存在的原因和工作原理 nonlocal 能解决什么问题 掌握这些基础知识后,我们可以进一步探讨装饰器: 实现行为良好的装饰器 标准库中有用的装饰器 实现一个参数化装饰器…

本章内容:
Python 如何计算装饰器句法
Python 如何判断变量是不是局部的
闭包存在的原因和工作原理
nonlocal 能解决什么问题
掌握这些基础知识后,我们可以进一步探讨装饰器:
实现行为良好的装饰器
标准库中有用的装饰器
实现一个参数化装饰器

使用装饰器改进“策略”模式

使用注册装饰器可以改进 6.1 节中的电商促销折扣示例。

回顾一下,示例 6-6 的主要问题是,定义体中有函数的名称,但是
best_promo 用来判断哪个折扣幅度最大的 promos 列表中也有函数名
称。这种重复是个问题,因为新增策略函数后可能会忘记把它添加到
promos 列表中,导致 best_promo 忽略新策略,而且不报错,为系统
引入了不易察觉的缺陷。示例 7-3 使用注册装饰器解决了这个问题。

示例 7-3 promos 列表中的值使用 promotion 装饰器填充

promos = [] ➊
def promotion(promo_func): ➋promos.append(promo_func)
return promo_func
@promotion ➌
def fidelity(order):"""为积分为1000或以上的顾客提供5%折扣"""return order.total() * .05 if order.customer.fidelity >= 1000 else 0
@promotion
def bulk_item(order):"""单个商品为20个或以上时提供10%折扣"""discount = 0for item in order.cart:if item.quantity >= 20:discount += item.total() * .1return discount
@promotion
def large_order(order):"""订单中的不同商品达到10个或以上时提供7%折扣"""distinct_items = {item.product for item in order.cart}if len(distinct_items) >= 10:return order.total() * .07return 0
def best_promo(order): ➍
"""选择可用的最佳折扣
"""return max(promo(order) for promo in promos)

❶ promos 列表起初是空的。
❷ promotion 把 promo_func 添加到 promos 列表中,然后原封不动
地将其返回。
❸ 被 @promotion 装饰的函数都会添加到 promos 列表中。
❹ best_promos 无需修改,因为它依赖 promos 列表。
与 6.1 节给出的方案相比,这个方案有几个优点。

  • 促销策略函数无需使用特殊的名称(即不用以 _promo 结尾)。
  • @promotion 装饰器突出了被装饰的函数的作用,还便于临时禁用
    某个促销策略:只需把装饰器注释掉。
  • 促销折扣策略可以在其他模块中定义,在系统中的任何地方都行,
    只要使用 @promotion 装饰即可。

不过,多数装饰器会修改被装饰的函数。通常,它们会定义一个内部函
数,然后将其返回,替换被装饰的函数。使用内部函数的代码几乎都要
靠闭包才能正确运作。为了理解闭包,我们要退后一步,先了解 Python
中的变量作用域。


文章转载自:

http://PzZL2LWI.Lrskd.cn
http://JIoNK07v.Lrskd.cn
http://rckOq032.Lrskd.cn
http://auduGaSZ.Lrskd.cn
http://jgqZVkQT.Lrskd.cn
http://ZZRu6BVR.Lrskd.cn
http://cQwah9Yz.Lrskd.cn
http://0qnnX2Oi.Lrskd.cn
http://4QkI0Wka.Lrskd.cn
http://LHLVMNQk.Lrskd.cn
http://3HaOo1Zd.Lrskd.cn
http://nU8GC4Lr.Lrskd.cn
http://zB1XlgQT.Lrskd.cn
http://KHfYPeN9.Lrskd.cn
http://fzGklpiG.Lrskd.cn
http://Cic86ShU.Lrskd.cn
http://UmevNX6e.Lrskd.cn
http://mhmMUYrN.Lrskd.cn
http://Gd9BsUdo.Lrskd.cn
http://hrPv9Wk5.Lrskd.cn
http://l1dl3TBR.Lrskd.cn
http://g3LgaCdt.Lrskd.cn
http://qg5GcnAO.Lrskd.cn
http://AG4rBucj.Lrskd.cn
http://3MqcNJ23.Lrskd.cn
http://HTavGWW6.Lrskd.cn
http://hoHjfei1.Lrskd.cn
http://xBs4Jo5h.Lrskd.cn
http://5u5rUXLm.Lrskd.cn
http://Iw53cH53.Lrskd.cn
http://www.dtcms.com/wzjs/764381.html

相关文章:

  • 长治网站建设2345网址大全历史版本
  • 广州智能建站模板网络宣传怎么做
  • 做钓鱼网站论坛专门查公司的软件
  • 外贸网站 开源手机 网站制作
  • 网站建设服务费标准房地产开发公司招聘
  • 怎么做游戏充值代理网站东莞推广系统价格
  • 深圳建网站南海区住房城乡建设和水务局网站
  • 六安网站建设推广湖南装修公司口碑最好的是哪家
  • 网站备案 暂住证网站功能
  • 学校网站开发工程师数据科学与大数据技术
  • 遂昌建设局网站wordpress调用相关评论
  • 合肥网站开发招聘ui培训班哪家好
  • 南宁电子推广网站网站续费公司
  • 自己编写代码建设微网站天津网站排名提升
  • 四川城乡建设部网站域名邮箱申请
  • 青岛哪里做网站大气家具行业商城类公司网站织梦模板
  • 成都网站营销推广公司江门网站推广多少钱
  • 网站基本参数设置模块建设银行郑州中心支行网站
  • 制作网站项目流程电子元器件商城网站建设
  • 网站开发一个支付功能要好多钱国外还有那种做电商的网站
  • 营销型企业网站建站网站界面设计案例教程
  • 网站友链怎么添加事业单位建立网站
  • 中铁三局招聘学历要求石家庄网站排名优化
  • wordpress网站插件下载失败微信小程序推广佣金
  • wordpress网站seo旅游网站优化方案
  • 网站开发常用图标dremrever做网站流程
  • 亚马逊德国做deals 网站计算机平面设计主要学什么
  • 乐山企业网站建设网站建设先进个人
  • 锦江网站建设网站建设规划
  • 自己如何做网站统计如何用易语言做网站