概述:

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

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

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

编写

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

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

 """函数定义装饰器"""
# 通用性更好 # 参数化装饰器
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. CSS Pixel 和 Device pixels

    Web developers need CSS pixels, that is, the pixels that are used in CSS declarations such as " ...

  2. Java 实例 - instanceof 关键字用法

    Java 实例 - instanceof 关键字用法 instanceof 是 Java 的一个二元操作符,类似于 ==,>,< 等操作符. instanceof 是 Java 的保留关键 ...

  3. git补充(命令)转自https://github.com/Wasdns/github-example-repo

    在使用命令行进行提交时,通常使用git commit -m '注释信息'来填写commit注释信息,但是-m参数适合单行注释,对于多行的commit注释来说是不合适的.这里推荐使用git commit ...

  4. Cesium的Property机制总结

    前言 Cesium官方教程中有一篇叫<空间数据可视化>(Visualizing Spatial Data).该文文末简单提到了Cesium的Property机制,然后话锋一转,宣告此教程的 ...

  5. 【SpringBoot/MVC】从Oracle下载百万条记录的CSV

    工程下载地址:https://files.cnblogs.com/files/xiandedanteng/CsvDownloadOracle20191110-2.rar 画面: 核心代码: 控制器: ...

  6. CVE-2019-11477:Linux 内核中TCP协议栈整数溢出漏洞详细分析 代码卫士 今天

    CVE-2019-11477:Linux 内核中TCP协议栈整数溢出漏洞详细分析 代码卫士 今天

  7. Leetcode: Longest Palindromic Substring && Summary: Palindrome

    Given a string s, find the longest palindromic substring in s. You may assume that the maximum lengt ...

  8. React——相关工具概述

    Create a New React App Use an integrated toolchain for the best user and developer experience. This ...

  9. [Scikit-learn] 1.1 Generalized Linear Models - from Linear Regression to L1&L2

    Introduction 一.Scikit-learning 广义线性模型 From: http://sklearn.lzjqsdd.com/modules/linear_model.html#ord ...

  10. python使用退格键时出现^H解决方法

    Linux 使用退格键时出现^H解决方法 1.临时解决 按ctrl 2.永久解决 基本现象 进入 Python shell,按下 Delete/Backspace 键: Python 3.5.2 (d ...