范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

python编程装饰器

  装饰器import datetime   def f1():     print("this is a fnction")  # 定义是打印一句话   def f1():     print(f"{datetime.datetime.today():%Y-%m-%d}")     print("this is a fnction")   f1() 2021-12-28 this is a fnction
  业务需求,需要添加打印时间的需求,完成了需求。如果有100个函数都要打印时间的功能 违背了开闭原则:修改是封闭的,扩展是开放的(需求变更,扩展函数/类) def f2():     print("this is a fnction")   # 利用函数特性,专门编写一个打印时间的函数 # 函数式编程的原理,函数是可以作为另外一个参数传进来的 def time_print(func):     print(f"{datetime.datetime.today():%Y-%m-%d}")     func()   time_print(f2)   time_print(f2) time_print(f2)    2021-12-28 this is a fnction 2021-12-28 this is a fnction 2021-12-28 this is a fnction
  没有体现出和f2的关联性 不够优雅,打印时间这个需求是属于函数本身的并不是属于新增加的这个函数,函数执行之前强行的加打印时间,并不符合函数的特性 # 无区别 print(f"{datetime.datetime.today():%Y-%m-%d}") f1() print(f"{datetime.datetime.today():%Y-%m-%d}") f2() 2021-12-28 2021-12-28 this is a fnction 2021-12-28 this is a fnction
  有没有方法让我们这个新添加的逻辑和老函数可以绑定在一起,体现老函数功能增加,但又不去改这个函数呢,这就是装饰器要去解决的问题 # 装饰器 def decorator(func):  # 装饰器实现外部函数 实现装饰器需要嵌套函数定义方式     def wrapper():  # 被封装 新增加的业务逻辑加入进来 # 无参数         print(f"{datetime.datetime.today():%Y-%m-%d}")         func()      return wrapper   def f3():     print("this is a fnction")   f = decorator(f3) f() 2021-12-28 this is a fnction
  像闭包的行为 f是个函数 这样的写法内聚性高一些 定义一个嵌套函数,调用的时候还不能直接调用原来这个函数来使用,先用这个装饰器作为一个函数,把f3作为参数传到里面去, 一个变量接受它,变量的方式间接调用函数 增加了时间函数后,依然可以调用原来的函数来实现新增加的功能 装饰器 提供了一个语法糖 @ @decorator def f4():     print("this is a fnction f4")  # 没有改变函数实现和调用的方式,以前是调f1现在也是   f4()2021-12-28 this is a fnction f4
  装饰器带参数带一个参数 def decorator(func):  # 装饰器实现外部函数 实现装饰器需要嵌套函数定义方式     def wrapper(name):  # 被封装 新增加的业务逻辑加入进来 # 无参数         print(f"{datetime.datetime.today():%Y-%m-%d}")         func(name)      return wrapper  @decorator def f5(name):     print("this is a fnction f5" + name)  # 没有改变函数实现和调用的方式,以前是调f1现在也是      f5("name")2021-12-28 this is a fnction f5name
  带多个参数 def decorator(func):  # 装饰器实现外部函数 实现装饰器需要嵌套函数定义方式     def wrapper(*name):  # 被封装 新增加的业务逻辑加入进来 # 无参数         print(f"{datetime.datetime.today():%Y-%m-%d}")         func(*name)      return wrapper   @decorator def f6(name1, name2):     print("this is a fnction f6" + name1)     print("this is a fnction f6" + name2)   f6("name1", "name2") 2021-12-28 this is a fnction f6name1 this is a fnction f6name2
  关键字参数
  完整的形式 def decorator(func):  # 装饰器实现外部函数 实现装饰器需要嵌套函数定义方式     def wrapper(*name, **kwname):  # 被封装 新增加的业务逻辑加入进来 # 无参数         print(f"{datetime.datetime.today():%Y-%m-%d}")         func(*name, **kwname)  # 不知参数传什么      return wrapper  @decorator def f7(name1, name2, **kwname):     print("this is a function f7" + name1)     print("this is a function f7" + name2)     print(kwname)  f7("name1", "name2", a=1, b=2, c=3) 2021-12-28 this is a function f7name1 this is a function f7name2 {"a": 1, "b": 2, "c": 3}
  @decorator def f8(name1):     print("this is a function f8" + name1)      f8("name1")     2021-12-28 this is a function f8name1
  @decorator def f9(name1, name2):     print("this is a function f9" + name1)     print("this is a function f9" + name2)      f9("name1", "name2") 2021-12-28 this is a function f9name1 this is a function f9name2
  思想 什么地方用 被封装的单元比如函数要修改的时候,不想改变原来函数的实现,使用装饰器,稳定性 时间,代码复用
  函数可以有很多个装饰器# 函数可以有很多个装饰器 def print_time(func):     def wrapper(key):         print(f"{datetime.datetime.today():%Y-%m-%d}")         func(key)      return wrapper   def get_info(func):     def wrapper(key):         func(key)         if key == "1":             print("info")      return wrapper   @print_time @get_info def f10(key):     print("查找资料")   f10("1")2021-12-28 查找资料 info

虚报三份财报,海马汽车终收监管函海马汽车在边缘化的道路上越陷越深。11月1日,深交所对海马汽车下发监管函。监管函指出,2021年月4月23日,海马汽车披露了关于会计差错更正的公告,对2020年第一季度报告半年度报特斯拉市值破万亿比亚迪拒绝苹果长城专注造汽车01hr特斯拉市值破万亿,中国市场成重要助推力据外媒报道,北京时间10月26日凌晨,全球连锁汽车租赁品牌赫兹(Hertz)宣布向特斯拉订购10万辆电动汽车,以在2022年底前建立电小鹏汽车势如破竹!10月交付10138台,连续两月破万正所谓金九银十,这样的定律,在汽车圈里永不过时。在刚刚过去的金秋10月,不少车企都是收获到了丰盛的成绩单。比如身为造车新势力第一梯队的小鹏汽车。11月第一天本周的第一个工作日距离打大安全,高合汽车的一个注脚电动化高端化,一定会是未来的趋势,但中国汽车品牌在高端电动市场的强势还是超出了很多人的预料。据乘联会发布的9月份乘用车销量排行榜,在50万以上豪华品牌电动车销量排名中,排名前三的分让用户参与企业营销,挖掘产品娱乐优势现在很多企业在做营销时,一般都是从客户和产品功能上下功夫,如在用户常去地方做广告牌宣传,在用户常看的频道做广告等等,虽然这种做法无可厚非,但是在互联网的今天,仅凭这一种做法是很难获智能垃圾桶帮你自动打包封袋,解放双手,与细菌零接触最近工作有点忙,好久没给大家带来好物推荐了,有数马上搬新房了,一直在选购提升品位的居家好物件。今天给大家带来一款townew拓牛智能垃圾桶。这是一款与众不同的智能垃圾桶,在大家心里千元内电脑椅,六大工学设计,值得入手吗?劳神费心的装修计划终于进行到一大半,最近有数准备给新房选购一把椅子,以前使用定做的实木水曲柳电脑椅,长时间坐着不仅屁股痛,因实木的原因倚靠对后背也不舒服,总之,这次必须买一把舒服的无线耳机是否能彻底替代有线耳机?关于这个争论在论坛上讨论和争辩很厉害,不少人认为将来一定是无线耳机的天下,有线耳机一定会被淘汰,这些用户以数码用户比较多,而HIFI用户则还是认为HIFI脱离不开有线耳机,无线是走颜值最高的减震舒缓拖鞋,给你满满的踩死感,助力夏天最靓的仔今年的夏天特别热,属于肥胖中人的有数就不喜欢夏季,有数决定今年夏天穿的宽松休闲点,多少抵挡一下高温天气,近日选购了一双拖鞋,作为一整个夏季的通勤鞋。并且现在穿拖鞋出门还会定义成有钱淘宝70的衣服拼多多39,发退货地址相同,小姐姐曝光电商秘密拼多多39元的衣服,淘宝卖70!最近,有位小姐姐爆料,她分别在淘宝和拼多多买了件同款衣服,到货后却发现衣服的质量气味以及上身效果都一模一样,只是淘宝这件买成70元,拼多多39元。而平头耳塞的消亡史续在前几天的文章中谈到了平头耳塞的消亡史,我没想到真的有很多条友对入耳式不适应,当然也有一些条友对平头塞不适应,纷纷吐槽对方的设计不合理。我给个小贴士,平头塞如果不戴海绵套,真的是不
被关了15年后释放,河南村民申请1800多万国家赔偿!网友吵翻天了就在两个月之前的4月1日,因为毒鼠强案被拘捕,在牢狱里待了15年多的河南民权县周岗村村民吴春红被无罪释放了。吴春红从2004年11月被抓,到2020年4月初被无罪释放,这监狱里待了河南村民坐牢16年,申请1800万国家赔偿,网友别忘了追责这两天,因16年前投毒杀人案被抓起来的河南村民吴春红,因为申请国家赔偿金问题,又进入了人们的视线,引起了不少媒体的报道就在6月2日,吴春红走进了河南省高级人民法院,递上去了1800广东夫妻超生被罚32万元,卫健局可申请分期缴纳,网友人性化大家都知道,前一段时间,有一些代表提出了放开三胎政策的建议,主要是觉得现在新生人口在不断减少,很多年轻人缺乏生育的意愿,这对于长期的应对发展是不利的。不过有些地区,对于超生还是抓得想靠直播赚钱?其实摆地摊更靠谱郑州男子摆摊开上奔驰车现在短视频和直播非常火爆,很多人看到一些直播平台的大主播通过PK或者带货,一晚上进账几百万甚至更多,不由得热血沸腾,希望自己也通过做做直播获得高额的收入,于是乎最近一段时间兴起了一怎么证明你妈是你妈?景区工作人员一句话,把民警问愣了大家都知道,现在很多地方办业务都需要各种证明,比如说到银行去办银行卡或者取款,就要有自己的身份证,自己的手机号等。而去购买车票或者是办手机卡,也需要自己的身份证明,而有些是可以代办佐佐木希老公渡部建出轨,成为各大媒体头条,网友没正事干了?最近这两天,打开手机和电脑,满屏皆是佐佐木希老公渡部建出轨的消息,简单统计了一下,这个消息在很多大媒体关注度都排在第一。说实话,对于这样的消息,小编是一点兴趣都没有,现在国内的明星杭州失踪女子丈夫许某在物业工作?大家都说错了,物业否认这件事杭州来女士失踪的事情现在已经水落石出,原来她已经遇害了,而犯罪嫌疑人就是她的二婚丈夫,此前他曾经在接受采访时候侃侃而谈。此前媒体曝出,这个丈夫许某和来女士在结婚前都有各自的家庭,而华为遭到打压,国内媒体和电商却在大力宣传苹果,这正常吗?最近,和几个朋友一起吃饭,聊起来一个很有趣的话题有朋友提出,这几天很多国内的媒体和电商平台在铺天盖地地宣传iphone12,让他感觉不解,他说不是米国一直在打压我国的华为吗?为什么女子要求母乳放高铁冰箱遭拒,网友称高铁不人性化,你怎么看呢?最近媒体曝出一个消息,引起了不少网友的热议一名女子要求母乳放高铁冰箱遭拒,结果网友的看法不一,有些网友认为,高铁做得没有毛病,因为高铁上的冰箱是存放贩售的饮料用的,不是提供给旅客用为啥现在做自媒体图文创作的人越来越少了?有三大原因大家都知道,自媒体创作曾经风行一时,很多人甚至通过多媒体创作,走上了小富的道路,而且各种自媒体平台也如雨后春笋般涌现出来,一时之间让人感觉到了百花齐放,百家争鸣的热闹场面,而且一根老师身披嫁衣赶去和学生拍毕业照,有人称感人,也有人称作秀就在前一阵子,网上曝出了一个感人而温馨的消息一位女老师为了不耽误参加学生的毕业照拍摄,照结婚的当天身穿新娘嫁衣赶来与学生合影,被很多网友称为最值得纪念的毕业照片。据知情人士透露称,