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

Posted jiangxiaolong-1996

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了装饰器,闭包,高阶函数,嵌套函数相关的知识,希望对你有一定的参考价值。



高阶函数代码形式:(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)

 

 













以上是关于装饰器,闭包,高阶函数,嵌套函数的主要内容,如果未能解决你的问题,请参考以下文章

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

Python函数作用域嵌套函数闭包函数高阶函数及装饰器的理解

Python--高阶函数函数嵌套名称空间及变量作用域闭包装饰器

Python 进阶

python全栈学习总结六:装饰器

装饰器和高阶函数