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('**')
    return  nb
def cc(func):
    def nb(cs):
        print('#########')
        func(cs)
        print('#########')
    return  nb
@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))   #输出17  4为外部函数变量 ,5 为内部函数变量

输出:
17
18
17

猜你喜欢

转载自blog.csdn.net/aixiangnan/article/details/88938311