简单记录一下利用python装饰器来调整函数的方法.现在有个需求:参数line范围为1-16,要求把9-16的范围转化为1-8,即9对应1,10对应2,...,16对应8. 下面是例子: def format_lines(): def make_wrapper(func): def wrapper(*args, **kwargs): lines = list(args)[1:] new_args = list() for index, line in enumerate(lines): if i…
装饰器1:函数装饰器 装饰器2:类装饰器 装饰器3:进阶 先混个眼熟 谁可以作为装饰器(可以将谁编写成装饰器): 函数 方法 实现了__call__的可调用类 装饰器可以去装饰谁(谁可以被装饰): 函数 方法 类 基础:函数装饰器的表现方式 假如你已经定义了一个函数funcA(),在准备定义函数funcB()的时候,如果写成下面的格式: @funcA def funcB():... 表示用函数funcA()装饰函数funcB().当然,也可以认为是funcA包装函数funcB.它等价于: def…
1.装饰器: 本质是函数,功能是为其他函数添加附加功能 原则:1.不修改被装饰函数的源代码 2.不修改被修饰函数的调用方式 装饰器=高阶函数+函数嵌套+闭包 #装饰器格式框架def wrap(func): def wrapper(*args,**kwargs): func(*args,**kwargs) return wrapper 2.高阶函数 含义:1.函数接受参数的是一个函数 2.函数返回值是一个函数 3.满足上面任一条件都是高阶函数 # 高阶函数import time def hello…
装饰器内获取函数有用信息方法 .__doc__用于得到函数注释信息 .__name_用于得到函数名 在函数引用装饰器的时候,函数名会变为装饰器内部执行该函数的名字,所有在直接执行函数名加.__doc__或__name_的时候得到的是,装饰器内部函数的注释信息和名字.因为函数名被替换了. 所以想得到实际的内容,需要引用一个模块,from functools import wraps,并在装饰器函数内部再加一个@wraps的形式改变,得到实际想得到的信息. 作用是在函数加上装饰器后让能够得到真正原来…
1.装饰器 装饰器用来实现一种切面功能,即一些函数在调用前都必须实现的功能,比如用户是否登录,用户是否有权限这类需求,都很容易由装饰器来实现. import functools def log(func): @functools.wraps(func) def wrapper(*args, **kw): print('call %s():' % func.__name__) return func(*args, **kw) return wrapper @log def now(): print…
装饰器+描述符 实现给一个类添加属性且对添加的时,对属性进行类型审核: def zsq(**kwargs): def fun(obj): for i,j in kwargs.items(): setattr(obj,i,mxf(i,j)) return obj return fun class mxf(): def __init__(self,na,ty): self.na = na self.ty = ty def __get__(self, instance, owner): return…
import datetime def count_time(func): def int_time(*args, **kwargs): start_time = datetime.datetime.now() # 程序开始时间 func() over_time = datetime.datetime.now() # 程序结束时间 total_time = (over_time-start_time).total_seconds() print('程序共计%s秒' % total_time) r…
本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是Python专题的第12篇文章,我们来看看Python装饰器. 一段囧事 差不多五年前面试的时候,我就领教过它的重要性.那时候我Python刚刚初学乍练,看完了廖雪峰大神的博客,就去面试了.我应聘的并不是一个Python的开发岗位,但是JD当中写到了需要熟悉Python.我看网上的面经说到Python经常会问装饰器,我当时想的是装饰器我已经看过了,应该问题不大-- 没想到面试的时候还真的问到了,面试官问我Python当中的装饰器是…
python装饰器[1] 首先先明白以下两点 #嵌套函数 def out1(): def inner1(): print(1234) inner1()#当没有加入inner时out()不会打印输出1234,当前层级也就是作用域下必须调用函数才能引用 out1() #函数作用域 def out2(): a = 'aaa' def inner2(): a = 'bbb' print(a) inner2() print(a) out2()#当相同变量处于不同嵌套函数中,会根据作用函数由内而外查找 装饰…
一.装饰器是什么 python的装饰器本质上是一个Python函数,它可以让其他函数在不需要做任何代码变动的前提下增加额外功能,装饰器的返回值也是一个函数对象.简单的说装饰器就是一个用来返回函数的函数. 它经常用于有切面需求的场景,比如:插入日志.性能测试.事务处理.缓存.权限校验等场景.装饰器是解决这类问题的绝佳设计,有了装饰器,我们就可以抽离出大量与函数功能本身无关的雷同代码并继续重用. 概括的讲,装饰器的作用就是为已经存在的对象添加额外的功能. 二.为什么需要装饰器 1.先来看一个简单例子…