装饰器(Python)
装饰器(decorators)是 Python 的一个重要部分。简单地说:装饰器是修改其他函数的功能的函数,能让我们的代码更容易被扩展,更加简短。
举个例子:
def login():
print("登录中...")
login()
这是最简单的一个函数,直接调用必然是执行了print()吧。既然是模拟登录,那是不是应该加一些功能扩展一下呢,在不修改原函数的情况下,那么,装饰器来啦。
我们再定义一个装饰器(本质上是函数,符合闭包的特点) - decorator:http://yuyou10.nx04.com http://yuyou11.nx04.com http://yuyou12.nx04.com http://yuyou13.nx04.com http://yuyou14.nx04.com http://yuyou15.nx04.com http://yuyou16.nx04.com http://yuyou17.nx04.com http://yuyou18.nx04.com
def decorator(func):
check = '正在校验...'
finshed = '校验完毕...' def pack():
func()
print(check)
print(finshed) return pack
可以看到,这个装饰器的参数是函数,内部又封装了一个函数pack()(就是用来扩展login()的啦),最后将内部的pack()函数给返回;那么现在接着来使用一下装饰器吧。
@decorator # 加上装饰器@decorator
def login():
print("登录中...") if __name__ == '__main__':
login() # 加上装饰器后再执行
'''
运行结果:
登录中...
正在校验...
校验完毕...
'''
这样是不是就实现了不改变原有代码的情况下又进行了扩展呢。那为什么 在原函数前加上 @decorator 之后就做到这些动作了呢?那我们继续来看看,这玩意儿有什么作用。
将装饰器稍微修改一下,然后先不调用login(),看看会发生什么:http://yuyou00.nx04.com http://yuyou01.nx04.com http://yuyou02.nx04.com http://yuyou03.nx04.com http://yuyou04.nx04.com http://yuyou05.nx04.com http://yuyou06.nx04.com http://yuyou07.nx04.com http://yuyou08.nx04.com
def decorator(func):
print("=======装饰器开始加载=======")
check = '正在校验...'
finshed = '校验完毕...' def pack():
func()
print(check)
print(finshed) print("=======装饰器加载完毕======")
return pack @decorator # 加上装饰器@decorator
def login():
print("登录中...") if __name__ == '__main__':
# login()
pass

可见,普通函数加上 ‘@装饰器’ 之后默认执行了装饰器的函数,这里也就是执行了print语句之后又默默声明了pack()并且返回,那它返回给了谁?想都不用想,肯定跟login()有关啦。这里不调用,直接打印一下被装饰之后的login,看看是什么内容:
if __name__ == '__main__':
# login()
print(login)

所以得出结论:
函数加上装饰器,装饰器会默认自动加载,并且将内部封装的函数直接返回给被装饰者。
装饰器(Python)的更多相关文章
- 浅谈装饰器(Python)
先来了解函数和执行函数在python的区别 我再重新定义一个函数,在函数前面加上@set_func 执行结果如下: 函数前面没有加@set_fun 执行结果如下: 是不是可以不修改原来的函 ...
- 装饰器 python 你也可以叫语法糖
1.最简单的装饰器不带入参 def func(): pass def decorate(func) def wrapper(): return func() return wrapper 使用 @ ...
- 函数与装饰器Python学习(三)
1.1 文件处理 1.1.1 打开文件过程 在Python中,打开文件,得到文件句柄并赋值给一个变量,默认打开模式就为r f=open(r'a.txt','w',encoding='utf-8') p ...
- 装饰器python
装饰器 你是一家视频网站的后端开发工程师,你们网站有以下几个版块 1 2 3 4 5 6 7 8 9 10 11 def home(): print("---首页----" ...
- 函数 装饰器 python
今日内容概要 1.闭包函数 2.闭包函数的实际应用 3.装饰器简介(重点加难点) 4.简易版本装饰器 5.进阶版本装饰器 6.完整版本装饰器 7.装饰器模板(拷贝使用即可) 8.装饰器语法糖 9.装饰 ...
- Python基础之装饰器
1.什么是装饰器? Python的装饰器的英文名叫Decorator,当你看到这个英文名的时候,你可能会把其跟Design Pattern里的Decorator搞混了,其实这是完全不同的两个东西.虽然 ...
- 第二篇:python高级之装饰器
python高级之装饰器 python高级之装饰器 本节内容 高阶函数 嵌套函数及闭包 装饰器 装饰器带参数 装饰器的嵌套 functools.wraps模块 递归函数被装饰 1.高阶函数 高阶函 ...
- Python中利用函数装饰器实现备忘功能
Python中利用函数装饰器实现备忘功能 这篇文章主要介绍了Python中利用函数装饰器实现备忘功能,同时还降到了利用装饰器来检查函数的递归.确保参数传递的正确,需要的朋友可以参考下 " ...
- Python第二十六天 python装饰器
Python第二十六天 python装饰器 装饰器Python 2.4 开始提供了装饰器( decorator ),装饰器作为修改函数的一种便捷方式,为工程师编写程序提供了便利性和灵活性装饰器本质上就 ...
随机推荐
- 1-3课 介绍虚拟化技术、在虚拟机中安装windows7
虚拟化技术 可以使我们在同一台计算机上运行多个操作系统 用于教学环境 用于测试环境 和硬件无关 可移植到其他电脑直接使用 Ptov技术 不支持VtoP 节省管理成本 节省硬件投资 不用买设备 省 ...
- flutter 与 android 混合开发
现有的混合开发方式,都是存flutter项目在android系统或者iOS上面跑. 但是,实际情况是,我们需要在一个成熟的native项目上面,跑几个flutter页面,逐步的进行flutter的融合 ...
- libc.so.6修改链接指向后导致系统无法使用的原因及解决方法
https://www.cnblogs.com/weijing24/p/5890031.html http://man.linuxde.net/ldconfig
- Ganglia安装及配置
Ganglia安装及配置root用户下yum安装所依赖的环境(实际生产环境都已安装)yum -y install apr-develapr-util check-devel cairo-devel p ...
- Web 开发工具类(2): HttpClientUtils
HttpClientUtils 整合了一些 web开发中常用的httpClient操作: package com.evan.common.utils; import java.io.IOExcepti ...
- 学习记录一(Python算数运算符与if语句)
从网上找到一个Python的学习视频,之前的环境都装好了,今天看的就是算术运算符和变量的命名 其中Python的除法直接就是 / %用于求余 其中还可以进行幂运算** 例如2 ** 3 = 8 ...
- 树莓派4b点亮led灯基本步骤
方法/步骤1: 首先要了解树莓派上的针脚,下面以树莓派4b为例子 把LED的正极插在GPIO脚上,把负极插在GND上 这里的例子是:正极插在GPIO21 方法/步骤2: 创建脚本 在配置好的树莓派系统 ...
- SpringBoot之切面AOP
SpringBoot提供了强大AOP支持,我们前面讲解过AOP面向切面,所以这里具体AOP原理就补具体介绍: AOP切面主要是切方法,我们一般搞一些日志分析和事务操作,要用到切面,类似拦截器: @As ...
- 尝试在阿里云的Linux服务器器上安装拥有图形界面的Pycharm
在Linux服务器上跑Python项目发现每次从本地上传文件太过麻烦,于是打算在服务器上安装Pycharm直接写Pycharm代码. 去Pycharm的官网下载Linux版本(支持正版于是我下载了 ...
- Linux下静态ip的配置
------------恢复内容开始------------ TYPE=Ethernet BOOTPROTO=static#dhcp改为static,采用静态方式 DEFROUTE=yes IPV4_ ...