码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2018-07-07 20:10:27      阅读:175      评论:0      收藏:0      [点我收藏+]

标签:功能   import   16px   封装   turn   装饰器   from   war   一个   



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

 

 

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

标签:功能   import   16px   封装   turn   装饰器   from   war   一个   

原文地址:https://www.cnblogs.com/jiangxiaolong-1996/p/9277871.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!