第十四章装饰器

装饰器

  1. # 开放封闭原则
    - 1.对扩展是开放的
    - 2.对修改是封闭的

    # 在不修改源代码和调用方式的情况下,对函数进行扩展
    # 第一版装饰器
    def times(func):
       def foo():
           print('装饰001')
           func()
           print('装饰002')
       return foo

    def func1():
       print("今天是个好日子1")

    func1 = times(func1)
    func1()
  1. # python内置的语法糖
    # 要将语法糖放在被装饰的函数正上方
    def times(func):
       def foo():
           print('装饰001')
           func()
           print('装饰002')

       return foo

    @times
    def func1(): # func1 = times(func1)
       print("被装饰的函数1")

    @times
    def func2(): # func2 = times(func2)
       print("被装饰的函数2")

    func1()
  1. # 有参数的函数语法糖
    def func(func):

       def foo(*args, **kwargs):
           print('装饰001')
           func(*args, **kwargs)
           print('装饰002')
       return foo


    @func
    def func1(*args, **kwargs):
       print(args,kwargs)
       print('被装饰的函数1')


    @func
    def func2(*args, **kwargs):
       print(args,kwargs)
       print('被装饰的函数2')


    func2(5)
  1. # 要求
    #博客园登陆之后有几个页面,diary,comment,home,如果我要访问这几个页面,必须验证我是否已登录。 如果已经#成功登录,那么这几个页面我都可以无阻力访问。如果没有登录,任何一个页面都不可以访问,我必须先登录,登录成功#之后,才可以访问这个页面。

    user_status = {
      'user_name': None,
      'user_status': False

    }


    def auth(func):

      def foo():
          if user_status['user_status']:
              ret = func()
              return ret

          user_name = input('name:')
          user_pwd = input('pwd:')
          if user_name == 'xuhuo' and user_pwd == '123456':
              user_status['user_status'] = True
              ret = func()
              return ret
      return foo


    @auth
    def zhu_ye():
      print('欢迎来到博客园主页。')


    @auth
    def dirary():
      print('欢迎来到博客园的日记页面。')


    @auth
    def ping_lun():
      print('欢迎来到评论页面。')


    @auth
    def sui_bi():
      print('欢迎来到随笔页面。')


    zhu_ye()
    sui_bi()
    dirary()
    ping_lun()

PythonDay14的更多相关文章

  1. Python--day14(迭代器)

    今日主要内容 1.  带参装饰器 (了了解) 2.  迭代器(*****) 可迭代对象 迭代器对象 for迭代器 枚举对象 1.  带参装饰器 1.  通常,装饰器为被装饰的函数添加新功能,需要外界的 ...

  2. python---day14( 内置函数二)

    内置函数二一:匿名函数 lambda函数 lambda 表示匿名函数,不需要用def 来申明. 语法: 函数名=lambda 参数:返回值 ----〉 案例:f=lambda n:n*n 例子01: ...

  3. 路飞学城Python-Day14(practise)

    本章总结 练习题 1.logging模块有几个日志级别? 5个,按级别从高到低分别是 CRITICAL(灾难)>ERROR(错误)>WARNING(警示)>INFO(信息)>D ...

  4. 路飞学城Python-Day14

    转载:python之路-路飞学城-python-book [25.常用模块-logging模块详解] [26.常用模块-logging模块详解2] [27.常用模块-logging模块日志过滤和日志文 ...

  5. python-day14(正式学习)

    目录 三元表达式 列表推导式 字典生成式 zip()方法 生成器 yield关键字 迭代套迭代 send(value) close() throw() 自定义range方法 生成器表达式 匿名函数 与 ...

随机推荐

  1. linux下简单好用的端口映射转发工具rinetd

    linux下简单好用的工具rinetd,实现端口映射/转发/重定向官网地址http://www.boutell.com/rinetd 软件下载wget http://www.boutell.com/r ...

  2. 【BZOJ3261】最大异或和(可持久化Trie)

    题意: 思路:可持久化Trie板子题,支持序列插入和询问 #include<bits/stdc++.h> using namespace std; typedef long long ll ...

  3. ORA-01652: 无法通过 128 (在表空间 HIS_TABLESPACE_TEMP 中) 扩展 temp 段

    前言:采用jmeter进行压力测试,大概向oracle 添加了140W条数据. 结果系统涉及到该表的业务都异常卡.访问阿里巴巴的那个druid monitor,因为系统中集成了,查看sql监控中的sq ...

  4. [CSP-S模拟测试]:分组配对(倍增+二分)

    题目传送门(内部题108) 输入格式 输入文件第一行为两个正整数$n,M$. 接下来两行,第一行为$n$个正整数$a_1\sim a_n$,其中$a_i$表示编号为$i$的男生的实力值:第二行为$n$ ...

  5. webpack3升级webpack4

    cnpm i webpck@4 webpack-cli -D cnpm i webpack-cli -D cnpm update npm WARN deprecated extract-text-we ...

  6. ASP.NET中的物理路径与虚拟路径

    物理路径:c:\PathsAndURLs\Content\Colors.html虚拟路径:(http://localhost:53274/Content/Colors.html)路径中端口号后面的那部 ...

  7. 【Spark机器学习速成宝典】模型篇04朴素贝叶斯【Naive Bayes】(Python版)

    目录 朴素贝叶斯原理 朴素贝叶斯代码(Spark Python) 朴素贝叶斯原理 详见博文:http://www.cnblogs.com/itmorn/p/7905975.html 返回目录 朴素贝叶 ...

  8. erlang实现排列组合问题

    今天在公司做一个日志分析的任务,在做统计的时候,遇到这样一个问题, 之前已经将数据拆分好,出现这样一张中间表Table,简略写如下: A属性 B属性 C属性 D属性 1       3         ...

  9. 半硬化树脂PP的型号

    1080是PP半固化胶片的型号(perperg),还有7628,2116,2113,2112,1506等等型号,每种型号不一样代表其PP内部的玻纤布不一样,比如7628的玻纤布相对较粗.数值较小则玻纤 ...

  10. AS基本设置

    1,点开as之前应该做的事  很多人一定会在这个界面卡顿很久,其实这是as在检测更新.所以我们在点开as之前先修改它的配置文件,让它不再更新. 找到你安装as的目录,进入bin文件夹找到idea.pr ...