乐哈哈yoyo 发表于 2019-4-2 14:32:26

Python:装饰器 ,闭包

1:装饰器 :不改变被装饰的函数情况下附加一些功能
本质是函数, 用于装饰其他函数, 附加一些本身所没有的功能
实质: 是一个函数
    参数:是你要装饰的函数名(并非函数调用)
    返回:是装饰完的函数名(也非函数调用)
    作用:为已经存在的对象添加额外的功能
    特点:不需要对对象做任何的代码上的变动

例1:计算运行时长
import time
def hx(f):#装饰器的函数,f接受被装饰的函数名
    def neibu(): #装饰内部函数
      start=time.time()
      f() #调用被装饰的函数
      end=time.time()
      print(end-start)
    return neibu #装饰器返回内部函数。(内部代表的是包装盒)
@hx #@加函数名,代表下面的函数被hx装饰
def jisuan():
    print('12143')
jisuan()

例2:
import time
def dd(func):
    def nb(cs):
      print('**')
      func(cs)
      print('**')
    returnnb
def cc(func):
    def nb(cs):
      print('#########')
      func(cs)
      print('#########')
    returnnb
@cc
@dd
def ych(name):
    print(name,'开演唱会')
ych('周杰伦')
输出:
#########
**
周杰伦 开演唱会
**
#########

2,闭包
闭包三条件。装饰器里有闭包
1包含内部函数的函数
2内部函数使用了外部函数的变量
3返回内部函数名
def hanshu(b): #1,包含内部函数的函数
    a=3
    def nb(c): #闭包
      d=a*b+c # 3,内部函数使用了外部函数的变量
      return d
    return nb #2,返回内部函数名
x=hanshu(4)
print(x(5))
print(x(6))
print(hanshu(4)(5))   #输出174为外部函数变量 ,5 为内部函数变量
输出:
17
18
17

Miss_love 发表于 2020-12-30 17:00:56

支持分享
页: [1]
查看完整版本: Python:装饰器 ,闭包