概述:

用于管理和增强函数和类行为的代码

提供一种在函数或类定义中插入自动运行代码的机制

特点  更明确的语法、更高的代码可维护性、更好的一致性

编写

函数基础: 将函数赋给变量、将函数作为参数传递、函数嵌套及跨域访问

函数定义装饰器 通用性更好

 """函数定义装饰器"""
# 通用性更好 # 参数化装饰器
def tags(tag):
def tag_decorator(func):
def wrapper(*args, **kwargs):
return f'<{tag}>{func(*args, **kwargs)}</{tag}>'
return wrapper
return tag_decorator def p_decorator(func):
def wrapper(*args, **kwargs):
return '<p>'+func(*args, **kwargs)+'</p>' return wrapper def div_decorator(func):
def wrapper(*args, **kwargs):
return '<div>{}</div>'.format(func(*args, **kwargs)) return wrapper class Student:
def __init__(self, name):
self.name = name @p_decorator
def get_name(self):
return self.name.upper() @tags('p')
# @p_decorator
def get_text():
return '欢迎学习优品课堂课程' @tags('div')
@tags('p')
# @div_decorator
# @p_decorator
def get_upper_text(text):
return text.upper() if __name__ == '__main__':
print(get_text())
# < p > 欢迎学习优品课堂课程 < / p >
print(get_upper_text('www.codeclassroom.com'))
# < div > < p > WWW.CODECLASSROOM.COM < / p > < / div >
s = Student('Mike')
print(s.get_name())
# < p > MIKE < / p >

类定义装饰器

装饰器参数

 """类定义装饰器"""

 class P:
def __init__(self, func):
self.func = func def __call__(self, *args, **kwargs):
return '<p>' + self.func(*args, **kwargs) + '</p>' class Student:
def __init__(self, name):
self.name = name
# @P 会出现错误
def get_name(self):
return self.name.upper() @P
def get_text():
return '欢迎学习优品课堂课程'
@P
def get_upper_text(text):
return text.upper() if __name__ == '__main__':
print(get_text())
# < p > 欢迎学习优品课堂课程 < / p >
print(get_upper_text('www.codeclassroom.com'))
# < p > WWW.CODECLASSROOM.COM < / p >
s = Student('John')
print(s.get_name())
# JOHN

Python之装饰器笔记的更多相关文章

  1. Python闭包装饰器笔记

    Python三大器有迭代器,生成器,装饰器,这三个中使用最多,最重要的就是装饰器.本篇将重要从函数嵌套开始讲起,从而引入闭包,装饰器的各种用法等. python中的一切都是一个对象(函数也是) 1.首 ...

  2. python 3.x 的装饰器笔记

    今天学到了python的装饰器,感觉这个东西还是稍微有些复杂,所以记录下来,方便以后的查找.虽然标题是python 3.x的装饰器,但是我也没有怎么用过python 2.x,感觉上应该是和python ...

  3. Python各式装饰器

    Python装饰器,分两部分,一是装饰器本身的定义,一是被装饰器对象的定义. 一.函数式装饰器:装饰器本身是一个函数. 1.装饰函数:被装饰对象是一个函数 [1]装饰器无参数: a.被装饰对象无参数: ...

  4. Python札记 -- 装饰器补充

    本随笔是对Python札记 -- 装饰器的一些补充. 使用装饰器的时候,被装饰函数的一些属性会丢失,比如如下代码: #!/usr/bin/env python def deco(func): def ...

  5. python基础——装饰器

    python基础——装饰器 由于函数也是一个对象,而且函数对象可以被赋值给变量,所以,通过变量也能调用该函数. >>> def now(): ... print('2015-3-25 ...

  6. 【转】详解Python的装饰器

    原文链接:http://python.jobbole.com/86717/ Python中的装饰器是你进入Python大门的一道坎,不管你跨不跨过去它都在那里. 为什么需要装饰器 我们假设你的程序实现 ...

  7. 两个实用的Python的装饰器

    两个实用的Python的装饰器 超时函数 这个函数的作用在于可以给任意可能会hang住的函数添加超时功能,这个功能在编写外部API调用 .网络爬虫.数据库查询的时候特别有用 timeout装饰器的代码 ...

  8. python 基础——装饰器

    python 的装饰器,其实用到了以下几个语言特点: 1. 一切皆对象 2. 函数可以嵌套定义 3. 闭包,可以延长变量作用域 4. *args 和 **kwargs 可变参数 第1点,一切皆对象,包 ...

  9. 理解Python中的装饰器//这篇文章将python的装饰器来龙去脉说的很清楚,故转过来存档

    转自:http://www.cnblogs.com/rollenholt/archive/2012/05/02/2479833.html 这篇文章将python的装饰器来龙去脉说的很清楚,故转过来存档 ...

随机推荐

  1. mysql 导入导出表结构和表数据

    mysqldump -u用户名 -p密码 -d 数据库名 表名 > 脚本名; 导出整个数据库结构和数据mysqldump -h localhost -uroot -p123456 databas ...

  2. CV_Learn

    CV学习进度条记录,也是SRTP的进度记录. 阶段一(2019.4-2019.5): 1.opencv简单操作学习.(实现了一些基础操作,从颜色通道到边缘轮廓,2019.4.22完成) 2.linux ...

  3. matlab fspecial 用法解释

    Matlab 的fspecial函数用法 fspecial函数用于建立预定义的滤波算子,其语法格式为:h = fspecial(type)h = fspecial(type,para)其中type指定 ...

  4. 2019-8-15C#MDI窗体实现多窗口效果

    C#MDI窗体实现多窗口效果  Visual C#是微软公司推出的下一代主流程序开发语言,他也是一种功能十分强大的程序设计语言,正在受到越来越多的编程人员的喜欢.在Visual C#中,提供了为实现M ...

  5. LC 486. Predict the Winner

    Given an array of scores that are non-negative integers. Player 1 picks one of the numbers from eith ...

  6. java项目中ehcache缓存最简单用法

      java项目中ehcache缓存最简单用法: 1.下载ehcache-core-2.4.3.jar复制到项目的lib目录下 2.新建ehcache.xml文件,放置在项目src目录下的resour ...

  7. Yarn简单介绍及内存配置

    本文出自:http://blog.chinaunix.net/uid/28311809/abstract/1.html 在这篇博客中,主要介绍了Yarn对MRv1的改进,以及Yarn简单的内存配置和Y ...

  8. dts reader

    package com.aliyun.dts.connect; import com.alibaba.fastjson.JSONObject; import com.aliyun.drc.client ...

  9. PAT 甲级 1031 Hello World for U (20 分)(一开始没看懂题意)

    1031 Hello World for U (20 分)   Given any string of N (≥) characters, you are asked to form the char ...

  10. LeetCode_118. Pascal's Triangle

    118. Pascal's Triangle Easy Given a non-negative integer numRows, generate the first numRows of Pasc ...