装饰器(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)的更多相关文章

  1. 浅谈装饰器(Python)

    先来了解函数和执行函数在python的区别   我再重新定义一个函数,在函数前面加上@set_func 执行结果如下:   函数前面没有加@set_fun 执行结果如下:   是不是可以不修改原来的函 ...

  2. 装饰器 python 你也可以叫语法糖

    1.最简单的装饰器不带入参 def  func(): pass def  decorate(func) def wrapper(): return func() return wrapper 使用 @ ...

  3. 函数与装饰器Python学习(三)

    1.1 文件处理 1.1.1 打开文件过程 在Python中,打开文件,得到文件句柄并赋值给一个变量,默认打开模式就为r f=open(r'a.txt','w',encoding='utf-8') p ...

  4. 装饰器python

    装饰器 你是一家视频网站的后端开发工程师,你们网站有以下几个版块 1 2 3 4 5 6 7 8 9 10 11 def home():     print("---首页----" ...

  5. 函数 装饰器 python

    今日内容概要 1.闭包函数 2.闭包函数的实际应用 3.装饰器简介(重点加难点) 4.简易版本装饰器 5.进阶版本装饰器 6.完整版本装饰器 7.装饰器模板(拷贝使用即可) 8.装饰器语法糖 9.装饰 ...

  6. Python基础之装饰器

    1.什么是装饰器? Python的装饰器的英文名叫Decorator,当你看到这个英文名的时候,你可能会把其跟Design Pattern里的Decorator搞混了,其实这是完全不同的两个东西.虽然 ...

  7. 第二篇:python高级之装饰器

    python高级之装饰器   python高级之装饰器 本节内容 高阶函数 嵌套函数及闭包 装饰器 装饰器带参数 装饰器的嵌套 functools.wraps模块 递归函数被装饰 1.高阶函数 高阶函 ...

  8. Python中利用函数装饰器实现备忘功能

    Python中利用函数装饰器实现备忘功能 这篇文章主要介绍了Python中利用函数装饰器实现备忘功能,同时还降到了利用装饰器来检查函数的递归.确保参数传递的正确,需要的朋友可以参考下   " ...

  9. Python第二十六天 python装饰器

    Python第二十六天 python装饰器 装饰器Python 2.4 开始提供了装饰器( decorator ),装饰器作为修改函数的一种便捷方式,为工程师编写程序提供了便利性和灵活性装饰器本质上就 ...

随机推荐

  1. Set,Multiset,Iterator(迭代器)详解

    Set,Multiset,Iterator(迭代器) Iterator:迭代器 我们可以发现所谓一些数据结构比如说数组和链表,它们都有一些相似的性质.我们看下面两个例子: 数组:定义数组\(int~a ...

  2. 对于Python中的字节串bytes和字符串以及转义字符的新的认识

    事情的起因是之前同学叫我帮他用Python修改一个压缩包的二进制内容用来做fuzz,根据他的要求,把压缩包test.rar以十六进制的方式打开,每次修改其中一个十六进制字符串并保存为一个新的rar用来 ...

  3. 对于传统scnece-classfication的分析

    BoW模型最初应用于文本处理领域,用来对文档进行分类和识别.BoW 模型因为其简单有效的优点而得到了广泛的应用.其基本原理可以用以下例子来给予描述.给定两句简单的文档: 文档 1:“我喜欢跳舞,小明也 ...

  4. ios---设置UITabBarController的字体颜色和大小

    +(void)load{ NSMutableDictionary *attr3=[NSMutableDictionary dictionary]; attr3[NSForegroundColorAtt ...

  5. CInternetSession的简单使用

    1. CInternetSession的简单使用 CInternetSession session; CHttpFile *file = NULL; CString strURL = " h ...

  6. 通过欧拉计划学Rust编程(第54题)

    由于研究Libra等数字货币编程技术的需要,学习了一段时间的Rust编程,一不小心刷题上瘾. 刷完欧拉计划中的63道基础题,能学会Rust编程吗? "欧拉计划"的网址: https ...

  7. Codeforces 1296F Berland Beauty

    题目链接:http://codeforces.com/problemset/problem/1296/F 思路: 1————2————3————4————5————6 1->3 2 2-> ...

  8. CCF_ 201312-3_最大的矩形

    遍历数组中每一元素,左右延伸得出宽度. #include<iostream> #include<cstdio> using namespace std; int main() ...

  9. AI产品经理工作流程——需求分析和产品设计

    1.AI产品设计常见失败原因 技术驱动产品设计,即我有什么技术就做什么产品.尽管许多公司不惜重金招聘高级AI算法工程师,确实这样也能帮助企业拿到大量的融资,但也容易给公司带来技术决定产品设计的局限.然 ...

  10. 《Python学习手册 第五版》 -第11章 赋值、表达式和打印

    上一章对Python的语句和语法已经进行了基本的说明,接下来就是每个章节的详细说明,本章的主要内容就是标题中涵盖的三点:赋值语句.表达式语句.打印语句 本章重点内容如下: 1.赋值语句 1)赋值语句的 ...