python高手之路 笔记2装饰器专题 简明易懂

作者: treelake | 来源:发表于2016-08-07 12:49 被阅读321次

python装饰器

创建装饰器

  • 装饰器本质上就是一个函数,这个函数接收其他函数作为参数,并将其以一个新的修改后的函数进行替换。
  • 最简单的装饰器就是本体函数(identify function)
def identify(f):
    #A#
    return f

然后就可以像下面这样使用这个装饰器:

@identify
def foo():
    return 'bar'

它和下面的过程类似:

def foo():
    return 'bar'
foo = identify(foo)

#A#处,可以把一批函数都需要进行的操作都放在这,再用装饰器的形式来装饰那批函数,来简化代码。

注册装饰器

_functions = {}
def register(f):
global _functions
_functions[f.name] = foo
return foo

使用##

@register
def foo():
return 'bar'

- 在这个例子中,函数被注册并存储在一个字典里,以便后续可以根据函数名字提取函数

#### 装饰器升级
- ```python
import functools
import inspect
def check_is_admin(f):
    @functools.wraps(f)
    #使用functools使返回的wrapper函数的属性与原函数一致
    def wrapper(*args, **kwargs):
    #args得到函数传参
        func_args = inspect.getcallargs(f, *args, **kwargs)
        #返回一个将参数名字和值作为键值对的字典,不论参数的传递方式
        if func_args.get('username') != 'admin':
            raise Exception("This user is not allowed to get food")
        return f(*args, **kwargs)
        #return时执行函数,返回函数返回值,有点混,注意
    return wrapper
##使用##
@check_is_admin
def get_food(username, type='chocolate'):
    return type + " nom nom nom!"

python方法类装饰器

  • 在python3中不仅可以向方法传入该类的任意实例,还可以传入任何对象,只要它包含方法期望的属性
  • 静态方法 @staticmethod
  • 类方法@classmethod 第一个参数cls
  • 抽象方法 import abc; @abc.abstractmethod

其他

相关文章

  • python高手之路 笔记2装饰器专题 简明易懂

    python装饰器 创建装饰器 装饰器本质上就是一个函数,这个函数接收其他函数作为参数,并将其以一个新的修改后的函...

  • Python装饰器-专题笔记

    学会装饰器,Python更进阶 函数作用域到闭包到装饰器讲解,及闭包和装饰器的运用。 [√] 慕课网Meshare...

  • Python3简明教程五

    这部分主要说明Python3的迭代器、生成器、装饰器等相关知识。 来源:实验楼Python3简明教程 1. 迭代器...

  • Python装饰器

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

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

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

  • 理解和使用Python装饰器

    装饰器在 Python 中无处不在,功能强大。本篇介绍装饰器的原理和用法,力求通俗易懂。 我们从一个简单的例子开始...

  • 跟老奶奶说装饰器

    本文将用通俗易懂的方式阐述装饰器,欢迎指正~ 1.没有装饰器以前,代码冗余 2. 装饰器出厂 (1)思考为什么de...

  • Python ☞ day 5

    Python学习笔记之 装饰器& 偏函数 & 异常处理 & 断言 & 文件读写 &编码与解码 装饰器 概念:是一个...

  • 学习记录

    Python基础中的高级专题装饰器详解:https://www.bilibili.com/video/av1275...

  • 老男孩Python文章归纳-不全待补充

    Python学习之路 Day1-基础1 Day2-基础2 Day3-基础3 Day4-基础4 迭代器、生成器、装饰...

网友评论

  • drf:还是没看懂
    treelake:@drf 。。哪里有问题?

本文标题:python高手之路 笔记2装饰器专题 简明易懂

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