python 装饰器

python 装饰器,第1张

概述了解一下什么是装饰器?   装饰器(Decorators)是 Python 的一个重要部分。简单地说:他们是增加其他函数的功能的函数。他们有助于让我们的代码更简短,也更Pythonic(Python范儿)。   首先我们来看一下 Python 中的嵌套函数: def func1(): #定义函数func1 print(‘now you are inside the hi()

了解一下什么是装饰器?

  装饰器(Decorators)是 Python 的一个重要部分。简单地说:他们是增加其他函数的功能的函数。他们有助于让我们的代码更简短,也更Pythonic(Python范儿)。

 

首先我们来看一下 Python 中的嵌套函数:

def func1():        #定义函数func1    print(‘Now you are insIDe the hi()‘)    def greet():        #在函数中嵌套一个函数greet        return ‘Now you are in the gree()‘          #return返回一组字符串    def welcome():        return ‘Now you are in the welcome()‘    print(greet())            #打印greet    print(welcome())          #打印greetfunc1()        #调用func1函数

如果在程序中打印greet以及welcome时不加括号,程序输出的会是greet以及welcome函数的内存地址
那现在我们知道了可以在函数中定义另外的函数。也就是说:我们可以创建嵌套的函数。现在你需要再多学一点,就是函数也能返回函数。


接着再尝试从函数中返回函数:

def func1(name):        #定义一个func1函数并且传入一个参数name    def greet():        #定义greet函数        return "Now you are in the greet() function"        #return返回一组字符串    def welcome():        return "Now you are in the welcome() function"    if name == "snake":         #if判断,如果值对即返回greet        return greet    else:           #否则返回welcome        return welcomea = func1(name=‘snake‘)         #实例化对象,并且给传入的参数赋一个值print(a)# outputs: <function greet at 0x7f2143c01500># 上面清晰地展示了`a`现在指向到func1()函数中的greet()函数print(a())# outputs: Now you are in the greet() function

再次看看这个代码。在 if/else 语句中我们返回 greet 和 welcome,而不是 greet() 和 welcome()。为什么那样?这是因为当你把一对小括号放在后面,这个函数就会执行;然而如果你不放括号在它后面,那它可以被到处传递,并且可以赋值给别的变量而不去执行它  当我们写下 a = func1(),func1() 会被执行,而由于 name 参数默认是snake,所以函数 greet 被返回了。如果我们把语句改为 a =func1(name = "ali"),那么 welcome 函数将被返回。我们还可以打印出a(),这会输出 Now you are in the greet() function。

 

解释器的使用

import time            #导入一个time模块def timer(func):        #装饰函数    def inner():        #闭包函数        start=time.time()        func()         #函数调用        print(time.time()-start)    return inner        #返回inner  切记不能加括号,否则就成了调用函数def func1():        #被装饰函数    print(‘in func1‘)    time.sleep(2)      #等待两秒后继续func1=timer(func1)     #地址的一个改变func1()         #本质上调用的是inner

 

其实这样使用是比较麻烦的,接下来会使用一个python解释器自带的装饰函数

 

现在我们使用@(python 解释器的装饰函数),试一下

import time         #导入time模块def timer(func):        #装饰函数    def inner():        #闭包函数        start=time.time()         #定义一个变量start来获取程序开始执行的时间        func()          #调用func        print(time.time()-start)            #输出程序执行完成使用的时间    return inner        #返回inner  切记不能加括号,否则就成了调用函数@timer          #python解释器的装饰函数(@加上需要装饰函数的名称)def func1():        #被装饰函数    print(‘in func1‘)    time.sleep(2)       #程序等待两秒执行#func1=timer(func1)     #地址的一个改变func1()         #本质上调用的是inner

装饰器实际上是个python函数,实现是由闭包支撑的

 


应用场景:
1,引入日志
2,函数执行时间统计
3,执行函数前预备处理
4,执行函数后清理功能
5,权限校验等场景
6,缓存
7,事务处理

好了!今天的介绍的python装饰器到此就结束!

总结

以上是内存溢出为你收集整理的python 装饰器全部内容,希望文章能够帮你解决python 装饰器所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1190906.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-03
下一篇 2022-06-03

发表评论

登录后才能评论

评论列表(0条)

保存