python 装饰器

装饰器

  • 一个函数, 两个功能

  def func_3(line):
      def comp(value):
          if value >= line:
              print('{} >= {}'.format(value, line))
          else:
              print('{} < {}'.format(value, line))
      return comp
  
  f = func_3(60)  # 第一次调用外侧函数
  f(89)  # 第二次调用内层x
  # 相当于 
  func_3(60)(89)  

  • 自动将函数的参数放进了中间功能函数的中作为参数

  • 会将实际传入目标函数的参数在装饰器中先传入进行验证, 也就是先执行装饰器的函数, 再执行目标函数

  
  def dec_1(func):
      def wrapper(num1, num2):
          if num2 == 0:
              return ('0000')
          return func(num1, num2)
      return wrapper
  
  def average_1(num1, num2):
      return num1 / num2
  
  # averge_1 = dec_1(average_1)
  # a = averge_1(5, 0)
  # print(a)
  @dec_1
  def sum_1(num1, num2):
      return num1 + num2
  a = sum_1(1, 0)
  print(a)

接收不同 的参数

  • 装饰器需要写三层

  • 也就是说最内层的只能接收到目标函数的参数, 但是如果需要传入目标函数参数以外的参数就必须要再加一层装饰器, 来讲需要的参数传入

  
  def auth(auth_type):
      def dec_3(func):
          def wrapper(*args, **kwargs):
              if auth_type == '1':
                  print('111111111')
              elif auth_type == '2':
                  print('22222222')
              else:
                  print('0000--0000')
              return func(*args, **kwargs)
          return wrapper
      return dec_3
  @auth(auth_type='4')
  def average_3(*args):
      return sum(args)
  a = average_3(1, 2, 3, 4)
  print(a)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值