装饰器,闭包,高阶函数,嵌套函数



高阶函数代码形式:(1.函数接收的参数是一个函数名 2.函数的返回值是一个函数名)
def too():
    print('from too')     #高阶函数
def foo():
    print('from foo')
    return too
a = foo()
a()
def too():
    print('from too')
def foo(func):
    print('from foo')
    func()
a = foo(too)


函数嵌套 定义一个函数,在该函数的代码块中在定义函数(可以一直定义下去)
def foo():
    print('from in foo')
    def too():
        print('from in too')
    return too
too = foo()
too()

闭包,将变量(函数本身也是一种变量)用函数封装起来
def foo():
    def woo():
        print('闭包')
    return woo
woo = foo()
woo()

装饰器:
什么是装饰器. 装饰器是一个函数(具有高阶函数,嵌套函数,闭包等的特性),
作用:装饰器就是装饰函数的,及给函数添加功能
原则:1.不改变被装饰的函数的内部代码 2.不改变被装饰函数的调用方式

例如:给一个函数加一个测试函数调用时间的装饰器
import time
def foo(func):
    def woo(*args,**kwargs):
        a = time.time()                #定义了一个具有计算函数运行时间的装饰器
        res = func(*args,**kwargs)
        b = time.time()
        print(b - a)
        return res
    return woo
语法规定,@foo等同与two = foo(two).作用是在给不同的函数加装饰器时,只要在函数的前
面加上@装饰器的函数名就可以了.不需要给函数添加功能的就不需要加.(同时,还可以给函数加多个装饰器)
运行加了装饰器的函数,实质上是在运行装饰器(把函数放在装饰器内部运行)
@foo
def two(name,age):
    time.sleep(1)
    print('我叫%s,今年%s岁'%(name,age))
    return '不错'
#two = foo(two)
res1 = two('jiang','18')
print(res1)
 

猜你喜欢

转载自www.cnblogs.com/jiangxiaolong-1996/p/9277871.html