python学习day07 高阶函数 装饰器 语法糖

  

  语法糖对于计算机的运行并没有任何的好处,但是对于程序员的好处是很大的,方便我们写代码,所以称为糖

#******************************装饰器*************************
# 装饰器本质上就是一个python函数,他可以让其他函数在不需要做任何代码变动的前提下,增加额外的功能,装饰器的返回值也是一个函数对象。
# 装饰器的应用场景:比如插入日志,性能测试,事务处理,缓存等等场景

import time
def func1():
    print('in func1')
def timer(func):
    def inner():
        start = time.time()
        func()          #这里的func取得是形参,形参给的是func1,所以这里执行的是func1()
        print(time.time() - start)
    return inner
func1 = timer(func1)    #func1作为参数传递到timer函数中,timer函数返回一个inner的返回值赋值给func1,func1()也即inner()
func1()
#timer这个函数是用来计算别的函数(形参为函数名)的运行时间

  

#********装饰器语法糖******
import time
def timer(func):
    def inner():
        start = time.time()
        func()
        print(time.time() - start)
    return inner
@timer   #==> func1 = timer(func1) 除了这条语句,其他的语句都一样,而@timer 就相当于 timer(func1)语句,
         #这个@timer语句相当于把timer函数和与它相邻的下一个函数以func1 = timer(func1)这样的形式关联起来
def func1():
    print('in func1')
    time.sleep(1)   #延时1s
def func2():
    print('in func2')
    time.sleep(2)   #延时2s
func1()
func2()
# in func1
# 1.0009326934814453  输出结果是1s多,很明显func1函数扩展了计时功能
# in func2
import time
def timer(func):
    def inner():
        start = time.time()
        func()
        print(time.time() - start)
    return inner
@timer   #==> func1 = timer(func1) 除了这条语句,其他的语句都一样,而@timer 就相当于 timer(func1)语句,
         #这个@timer语句相当于把timer函数和与它相邻的下一个函数以func1 = timer(func1)这样的形式关联起来
def func2():
    print('in func2')
    time.sleep(2)   #延时2s
def func1():
    print('in func1')
    time.sleep(1)   #延时1s

func1()
func2()
# in func1
# in func2
# 2.0009799003601074    #这次因为func2和timer相邻,所以fun2扩展了计时功能

猜你喜欢

转载自www.cnblogs.com/perfey/p/9141661.html