python什么是装饰器_python学习之装饰器是什么?
学完python函数,接下来我们跟着猿人学python一起来看看什么是装饰器。
大家应该多多少少在其它地方有看过或是听过“装饰器”这个词。装饰器,顾名思义,就是用来装饰的,它装饰的是一个函数,保持被装饰函数的原有功能,再装饰上(添油加醋)一些其它功能,并返回带有新增功能的函数对象,所以装饰器本质上是一个返回函数对象的函数(确切的说,装饰器应该是可调用对象,除了函数,类也可以作为装饰器)。
Python的装饰器(decorator)是一个很棒的机制,也是熟练运用Python的必杀技之一。在编程过程中,我们经常遇到这样的场景:登录校验,权限校验,日志记录等,这些功能代码在各个环节都可能需要,但又十分雷同,通过装饰器来抽象、剥离这部分代码可以很好解决这类场景。
什么是装饰器?
要理解Python的装饰器,首先我们先理解一下Python的函数对象。我们知道,在Python里一切都是对象,函数也不例外,函数是第一类对象(first-class objects),它可以赋值给变量,也可以作为list的元素,还可以作为参数传递给其它函数。
函数可以被变量引用
定义一个简单的函数:def say_hi():
print('Hi!')
say_hi()# Output: Hi!
我们可以通过另外一个变量say_hi2来引用say_hi函数:say_hi2 = say_hi
print(say_hi2)# Output: say_hi2()# Output: Hi!
上面的语句中say_hi2 和 say_hi 指向了同样的函数定义,二者的执行结果也相同。
函数可以作为参数传递给其它函数def say_more(say_hi_func):
print('More')
say_hi_func()
say_more(say_hi)# Output:# More# Hi
在上面的例子中,我们把say_hi函数当做参数传递给say_more函数,say_hi 被变量 say_hi_func 引用。
函数可以定义在其它函数内部def say_hi():
print('Hi!') def say_name():
print('Tom')
say_name()
say_hi()# Output:# Hi!# Tomsay_name() # 报错
上述代码中,我们在say_hi()函数内部定义了另外一个函数say_name()。say_name()只在say_hi函数内部可见(即,它的作用域在say_hi函数内部),在say_hi外包调用时就会出错。
函数可以返回其它函数的引用def say_hi():
print('Hi!') def say_name():
print('Tom') return say_name
say_name_func = say_hi()# 打印Hi!,并返回say_name函数对象# 并赋值给say_name_funcsay_name_func()# 打印 Tom
上面的例子,say_hi函数返回了其内部定义的函数say_name的引用。这样在say_hi函数外部也可以使用say_name函数了。
前面我们理解了函数,这有助于我们接下来弄明白装饰器。
装饰器(Decorator)
装饰器是可调用对象(callable objects),它用来修改函数或类。
可调用对象就是可以接受某些参数并返回某些对象的对象。Python里的函数和类都是可调用对象。
函数装饰器,就是接受函数作为参数,并对函数参数做一些包装,然后返回增加了包装的函数,即生成了一个新函数。
让我们看看下面这个例子:def decorator_func(some_func):
# define another wrapper function which modifies some_func
def wrapper_func():
print("Wrapper function started")
some_func()
print("Wrapper function ended")
return wrapper_func # Wrapper function add something to the passed function and decorator returns the wrapper function
def say_hello():
print ("Hello")
say_hello = decorator_func(say_hello)
say_hello()# Output:# Wrapper function started# Hello# Wrapper function ended
上面例子中,decorator_func 就是定义的装饰器函数,它接受some_func作为参数。它定义了一个wrapper_func函数,该函数调用了some_func但也增加了一些自己的代码。
python什么是装饰器_python学习之装饰器是什么?相关推荐
- 如何使用python装饰器_Python学习之如何使用装饰器 @decorator
建议大家在看这篇文章之前还是点击上面这篇文章看一下,先了解一下什么是装饰器之后再看. 猿人学python之我的学习笔记分享:如何使用装饰器 @decorator 上面代码中使用装饰器的方法看起来有点复 ...
- python高级语法装饰器_Python高级编程——装饰器Decorator超详细讲解上
Python高级编程--装饰器Decorator超详细讲解(上篇) 送你小心心记得关注我哦!! 进入正文 全文摘要 装饰器decorator,是python语言的重要特性,我们平时都会遇到,无论是面向 ...
- python grpc unary call错误_python的黑魔法-装饰器
python的装饰器 装饰器 简单的来说就是函数的函数,在执行目标函数时,先执行装饰器函数,很像HOOk 简单的装饰器 实现一个打印日志的装饰器 def myLogger(func):def wrap ...
- python的网页解析器_python 之网页解析器
一.什么是网页解析器 1.网页解析器名词解释 首先让我们来了解下,什么是网页解析器,简单的说就是用来解析html网页的工具,准确的说:它是一个HTML网页信息提取工具,就是从html网页中解析提取出& ...
- python自带网页解析器_python 之网页解析器
一.什么是网页解析器 1.网页解析器名词解释 首先让我们来了解下,什么是网页解析器,简单的说就是用来解析html网页的工具,准确的说:它是一个HTML网页信息提取工具,就是从html网页中解析提取出& ...
- python游戏编程网课_Python 学习最佳方式_创建游戏_编程一个机器人
Python 是世界上功能最多且最强大的编程语言之一.使用 Python,你可以编写自己的应用程序,创建游戏.设计算法.甚至编程一个机器人.学习 Python 还可以担任软件工程师.Web 开发人员. ...
- webgl着色器初学习-顶点着色器和片元着色器
文章目录 webgl工作步骤 顶点着色器 片元着色器 案例 webgl工作步骤 每一个像素点都将执行这两个着色器 我理解为这两个着色器,顶点着色器决定渲染位置 ,片元着色器决定颜色 顶点着色器 编写一 ...
- python文件下载速度 装饰器_python学习笔记之---装饰器
# -*- coding:utf-8 -*- '''示例1: 最简单的函数,表示调用了两次''' def myfunc(): print ("myfunc() called.") ...
- python重写和装饰器_python中的装饰器
装饰器的本质: 当你在用某个@decorator来修饰某个函数func时,如下所示: @decorator def func(): pass 其解释器会解释成下面这样的语句: func=decorat ...
最新文章
- 2021年春季学期-信号与系统-第七次作业参考答案-第十小题
- 安装 postgresql
- 【Android 插件化】现有的针对插件化恶意应用的解决方案 | 插件化应用开发推荐方案
- Web应用界面设计规范
- 使用SQL Server 2008 Extended Events SSMS Addin轻松管理XEvents
- c语言 char memcpy,在C中使用memcpy复制无符号字符数组
- erp 弹不出oracle,ORACLE ERP系统经常出现的问题及解决办法
- 作者:吴甘沙,男,现任英特尔中国研究院院长。
- Go的web工作原理
- 笔记05 局部类型
- sencha touch 类的使用
- 2018上IEC计算机高级语言(C)作业 第1次作业 。
- 可复用可扩展的红包后台系统设计方案
- darknet + yolo3 训练自己的数据集
- SPSS进行问卷数据的效度分析及结果解读(问卷数据统计分析第3步(转载)
- 单片机蓝桥杯——超声波测距
- 水壶的问题—字节跳动Android岗面试题
- java抽象类例子月薪年薪程序_利用抽象类给一个有工资收入和稿费收入的小伙伴算税...
- CentOS 7重启报错:Entering emergency mode. Exit the shell to continue...
- 文化传播有限公司网站源码dian