博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Python-装饰器(Decorator)
阅读量:5138 次
发布时间:2019-06-13

本文共 1040 字,大约阅读时间需要 3 分钟。

装饰器的思想

装饰器是建立在Python中函数可以作为参数传递和返回的基础上,作用是对函数的功能和行为做扩充和延展,但是这个过程不会修改原函数的逻辑,所以叫装饰而不是修改。

装饰器的基本实现逻辑:

  • 传入目标函数(func)
  • 创建新函数(Wrapper)
  • 在Wrapper中执行func同时添加扩展功能
  • 返回新函数Wrapper

从逻辑中我们看出,装饰器的行为是用一个扩充过功能的新函数替换原函数,这个过程是在代码加载中完成的,被装饰过的函数实际上已经是装饰器返回的的新函数了。

由于装饰器返回的新函数中元数据已经发生了变化,为了保持新函数元数据和旧函数相同,可以使用@functools.wraps(f)装饰新函数Wrapper。

装饰器举例

1. 不带参数的装饰器
def decorator(f):    @functools.wraps(f)    def wrapper(*args, **kwargs):        print("decorator without param")        return f(*args, **kwargs)    return wrapper@decoratordef func(word):    print("word is: " + word)

@decorator是python语法糖,语法糖就是换一种方式执行既定的功能,@decorator等同于func = decorator(func)

2. 带参数的装饰器
def route(rule):    def decorator(f):        @functools.wraps(f)        def wrapper(*args, **kwargs):            print(rule)            print("decorator with params")            return f(*args, **kwargs)        return wrapper    return decorator@route('/app')def func(word):    print("word is: " + word)

@route('/app')等同于func = route('/app')(func)

转载于:https://www.cnblogs.com/Peter2014/p/11264833.html

你可能感兴趣的文章
PE知识复习之PE的导入表
查看>>
HDU 2076 夹角有多大(题目已修改,注意读题)
查看>>
洛谷P3676 小清新数据结构题(动态点分治)
查看>>
九校联考-DL24凉心模拟Day2T1 锻造(forging)
查看>>
Cortex M3/M4 学习摘要(二)
查看>>
C#时间的味道——任时光匆匆我只在乎你
查看>>
(1)数据结构——线性表(数组)实现
查看>>
SpringMyBatis解析2-SqlSessionFactoryBean
查看>>
按照excel文档中的内容在当前cad图纸中自动排布实体
查看>>
Winform开发框架之图表报表在线设计器2-图表-SNF.EasyQuery项目--SNF快速开发平台3.3-Spring.Net.Framework...
查看>>
C#基础第八天-作业-设计类-面向对象方式实现两个帐户之间转账
查看>>
洛谷 P3237 [HNOI2014]米特运输
查看>>
Attributes.Add用途与用法
查看>>
JavaScript面向对象初探——封装和继承
查看>>
L2-001 紧急救援 (dijkstra+dfs回溯路径)
查看>>
【概率】poj 2096:Collecting Bugs
查看>>
javascript 无限分类
查看>>
【自制插件】MMD4Maya
查看>>
解决linux服务器乱码
查看>>
mapbox.gl文字标注算法基本介绍
查看>>