【1.50】装饰器 --2

高阶函数:

函数接受的参数是一个函数名

函数的返回值是一个函数名

满足这两条的一条都是高阶函数

 

看看 如何 高阶 嵌套 

# 装饰器
# 没有修改被修饰函数的源代码
# 也没有修改被修饰函数的调用方式

# 高阶函数:
# 函数接受的参数是一个函数名
# 函数的返回值是一个函数名
# 满足这两条的一条都是高阶函数
print("函数接受一个函数1111111111111111")
import time
def foo():
    time.sleep(0.1)
    print("hello foo")
def test(func):
    print (func)              #打印func函数的地址
    start = time.time()
    func()                    #加一个括号就直接运行func
    stop = time.time()
    print ("函数运行时间:%s"%(stop-start))
test(foo)

#满足没有修改原代码、但是修改了函数的调用方式
#原来直接调用 foo(),现在修改了 变为了 test(foo)违背函数的开放封闭原则


print("函数接受一个函数,返回一个函数2222222222222222")
#那这里我们在用高阶函数的返回值也是一个函数名 来修改
import time
def foo():
    time.sleep(0.1)
    print("hello foo")
def test(func):
    return func

foo=test(foo)
foo()

#这里的foo 就可以运行前面的函数了
#没有改变调用方式 也没有改变函数代码  也满足 高阶函数的接收和返回都是一个函数名

#把上面的结合在一起就 接收和返回都是一个函数名  实现 没有改变调用方式 也没有改变函数代码
#但是 添加附加功能  会出现二次运行 被修饰函数
print("函数接受一个函数,返回一个函数,但是函数要二次运行33333333333333333333333")
import time
def foo():
    time.sleep(0.1)
    print("hello foo")
def test(func):
    print (func)              #打印func函数的地址
    start = time.time()
    func()                    #加一个括号就直接运行func
    stop = time.time()
    print ("函数运行时间:%s"%(stop-start))
    return func               #会出现二次运行 被修饰函数
foo=test(foo)                 #实现了没有改变调用方式 也没有改变函数代码

# 也实现高阶函数  多运行一次,这里就必须使用 嵌套函数了


print("函数接受一个函数,返回一个函数,用了嵌套函数4444444444444444")
#看看嵌套函数:
#在函数内部 调用 其他函数不是函数嵌套
#在函数内部 定义另外的函数 就是函数嵌套

import time
def test(func):
    def wappy():
        start = time.time()
        func()                    #加一个括号就直接运行func
        stop = time.time()
        print ("函数运行时间:%s"%(stop-start))
    return wappy

@test
def foo():
    time.sleep(0.1)
    print("hello foo")
foo()

 

posted @ 2016-04-15 22:09  科学小怪癖  阅读(80)  评论(0)    收藏  举报