猫小乐 发表于 2018-7-15 01:48:26

pyhton装饰器

一、装饰器的引入
1.目标: 给源代码加功能;
2.实现原则:遵守开放封闭原则。封闭以实现的功能代码块;对功能的扩展开放。
二、实现方式
1.装饰器精髓(就两句话):
格式:@函数名
1)解释器碰到装饰器的@符号时,自动执行outer()函数,并将t1当做参数传入outer函数中;
2)将outer的返回值inner赋值给t1函数;
*如果两句话也记不住的话,就记一句: t1变成了inner函数
def outer(func):
      def inner():
                print("before")
                ret = func()         #先执行func()函数,然后将返回值赋值给ret。
                print("after")
                return ret
      return inner

@outer
def t1():
      print("hehe")

2.装饰器的参数问题:
    因为inner函数和t1函数是对应的,所以如果t1有参数的话,应该写在inner函数上。
    *outer函数的参数是func 这个参数,inner的参数是原函数的参数。

3.普通装饰器的通用写法(含参):
def outer(func):
      def inner(*args,**kwargs):
                print("before")
                ret = func(*args, **kwargs)       #先执行func()函数,然后将返回值赋值给ret。
                print("after")
                return ret
      return inner

@outer
def t1(a,b):
      print(a,b)
      print("hehe")
4.装饰器最常见的一种用法:
en-resource://database/4019:0


5.关于双层装饰器:
en-resource://database/4023:0


iyunv.com.cn 发表于 2018-7-18 09:14:39

555

eamc 发表于 2018-7-23 07:17:06

謝謝大大的解說
页: [1]
查看完整版本: pyhton装饰器