美文网首页
Python装饰器

Python装饰器

作者: feng_Zi | 来源:发表于2017-06-06 16:19 被阅读10次

Python装饰器分两种情况:
1.如果decorator本身不用传入参数的话,只是接受一个函数(当然也可以把接受的函数作为参数,为了区别,我们暂且将他们分开),并返回一个函数的话,当使用@log时即把目标函数接入;
2.如果decorator本身需要传入参数,那我们首先就需要在外层嵌套一个传入参数的接口,然后再接受函数并返回一个函数,内层则就是重复第一种情况,当时用@log('要传入的参数'),log('要传入的参数')就相当于第一种情况的log,也许这样说你还不是很能理解,我把廖大大的代码稍微做一点点改变,只改变下函数的名称:

1. 装饰器本身不用传入参数,只接收函数func

def decorator(func):
@functools.wraps(func)
def wrapper(*args, *kw):
print('call %s():' % func.name)
return func(
args, **kw)
return wrapper

@decorator
def f():
pass

2. 装饰器本身需要传入参数,再接收函数func

def log(text):
def decorator(func):
@functools.wraps(func)
def wrapper(*args, *kw):
print('%s %s():' % (text, func.name))
return func(
args, **kw)
return wrapper
return decorator

@log('execute')
def f():
pass

其中第二种情况@log('execute')就是传入了字符串参数的decorator,传入参数之后就完全等同于第一种情况的@decorator,log只是在第一种情况下作为实现传入字符串参数功能的外层,可以发现第二种情况的内层完全和第一种情况相同。线性的把第二种情况展开:首先log()传入字符串参数,然后返回decorator接受目标函数func,返回wrapper,最后wrapper输出内容并运行目标函数。明显传入字符串参数之后完全和第一种情况一致。

其他相关帮助理解资料:
探究functools模块wraps装饰器的用途 - 大道曙光
[译] 12步轻松搞定python装饰器

相关文章

  • 装饰器模式

    介绍 在python装饰器学习 这篇文章中,介绍了python 中的装饰器,python内置了对装饰器的支持。面向...

  • python中的装饰器

    python装饰器详解 Python装饰器学习(九步入门) 装饰器(decorator) 就是一个包装机(wrap...

  • [译] Python装饰器Part II:装饰器参数

    这是Python装饰器讲解的第二部分,上一篇:Python装饰器Part I:装饰器简介 回顾:不带参数的装饰器 ...

  • Python中的装饰器

    Python中的装饰器 不带参数的装饰器 带参数的装饰器 类装饰器 functools.wraps 使用装饰器极大...

  • Python进阶——面向对象

    1. Python中的@property   @property是python自带的装饰器,装饰器(decorat...

  • Python 装饰器填坑指南 | 最常见的报错信息、原因和解决方

    Python 装饰器简介装饰器(Decorator)是 Python 非常实用的一个语法糖功能。装饰器本质是一种返...

  • Python装饰器

    Python装饰器 一、函数装饰器 1.无参装饰器 示例:日志记录装饰器 2.带参装饰器 示例: 二、类装饰器 示例:

  • python3基础---详解装饰器

    1、装饰器原理 2、装饰器语法 3、装饰器执行的时间 装饰器在Python解释器执行的时候,就会进行自动装饰,并不...

  • 2019-05-26python装饰器到底是什么?

    装饰器例子 参考语法 装饰器是什么?个人理解,装饰器,是python中一种写法的定义。他仍然符合python的基本...

  • 2018-07-18

    Python装饰器 装饰,顾名思义,是用来打扮什么东西的。Python装饰...

网友评论

      本文标题:Python装饰器

      本文链接:https://www.haomeiwen.com/subject/dwagtxtx.html