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()

 

转载于:https://www.cnblogs.com/xuyuwei/p/11384337.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值