zoukankan      html  css  js  c++  java
  • PythonDay14

    第十四章装饰器

    装饰器

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

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

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

    func1 = times(func1)
    func1()
    # 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()
    # 有参数的函数语法糖
    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)
    # 要求
    #博客园登陆之后有几个页面,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()

     

  • 相关阅读:
    常用的android弹出对话框
    AutoCompleteTextView与TextWatcher的结合
    As of ADT 14, resource fields cannot be used as switch cases
    Linux中tshark(wireshark)抓包工具使用方法详解
    php模板引擎
    php中实现精确设置session过期时间的方法
    什么情况下会调用到session_destroy()
    PHPSession-完全PHP5之session篇
    彻底理解PHP的SESSION机制
    闪迪U3利用工具U3-Pwn
  • 原文地址:https://www.cnblogs.com/xuyuwei/p/11384337.html
Copyright © 2011-2022 走看看