码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2018-06-05 21:19:30      阅读:222      评论:0      收藏:0      [点我收藏+]

标签:函数返回   python   关联   传递   tar   应用   事务   一个   pytho   

  

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

#******************************装饰器*************************
# 装饰器本质上就是一个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扩展了计时功能

技术分享图片

 

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

标签:函数返回   python   关联   传递   tar   应用   事务   一个   pytho   

原文地址:https://www.cnblogs.com/perfey/p/9141661.html

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