给test函数加个装饰器!】的更多相关文章

import timedef timer(func): def deco(*args,**kwargs): start_time=time.time() func(*args,**kwargs) stop_time=time.time() print("the func run time is %s" %(stop_time-start_time)) return deco @timer #test1=time(test1)def test1(): time.sleep(3) prin…
关于函数的return li = [11,22,33,44] def f1(arg): arg.append(55) li = f1(li) print(li) 因为li = f1(li) 实际赋值的是f1的return,那么在这种情况下函数f1并未定义return,所以默认返回None 因此li的值应该是none 如果是 li = [11,22,33,44] def f1(arg): arg.append(55) f1(li) print(li) 因为函数传递的参数实际是参数的引用,因此在函数…
装饰器本质上是一个函数,该函数用来处理其他函数,它可以让其他函数在不需要修改代码的前提下增加额外的功能,装饰器的返回值也是一个函数对象.它经常用于有切面需求的场景,比如:插入日志.性能测试.事务处理.缓存.权限校验等应用场景.装饰器是解决这类问题的绝佳设计,有了装饰器,我们就可以抽离出大量与函数功能本身无关的雷同代码并继续重用.概括的讲,装饰器的作用就是为已经存在的对象添加额外的功能. 严格来说,装饰器只是语法糖,装饰器是可调用的对象,可以像常规的可调用对象那样调用,特殊的地方是装饰器的参数是一…
一.叠加多个装饰器二.迭代器三.自定义迭代器四.xxx生成式 一.叠加多个装饰器 # 加载装饰器就是将原函数名偷梁换柱成了装饰器最内层那个wrapper函数 # 在加载完毕后,调用原函数其实就是在调用wrapper函数 # 当一个被装饰的对象同时叠加多个装饰器时 # 装饰器的加载顺序是:自下而上 # 装饰器内wrapper函数的执行顺序是:自上而下 ''' import time def timmer(func): #func=wrapper2的内存地址 def wrapper1(*args,…
在实际工作当中存在一个开放封闭原则 1.对扩展是开放的 为什么要对扩展开放呢? 我们说,任何一个程序,不可能在设计之初就已经想好了所有的功能并且未来不做任何更新和修改.所以我们必须允许代码扩展.添加新功能. 2.对修改是封闭的 为什么要对修改封闭呢? 就像我们刚刚提到的,因为我们写的一个函数,很有可能已经交付给其他人使用了,如果这个时候我们对其进行了修改,很有可能影响其他已经在使用该函数的用户. 装饰器完美的遵循了这个开放封闭原则. 首先装饰器存在的意义是在不改变调用原函数的的情况下在原函数的前…
FBV模式装饰器: 普通函数的装饰器(语法糖@) views.py from django.shortcuts import render def wrapper(f): def inner(*args,**kwargs): print("before") ret=f(*args,**kwargs) print("after") return ret return inner @wrapper def index(request): return render(re…
目录 昨日回顾 可变长参数 * ** 函数对象 函数嵌套 名称空间和作用域 今日内容 闭包函数 装饰器 语法糖 装饰器模板 迭代器 昨日回顾 可变长参数 * *形参:接受多余的位置实参 *实参(可迭代数据类型):打散可迭代数据类型 ** **形参:接受多余的关键字实参 **实参:打散字典.当作关键字实参传参 函数对象 引用 作为容器类元素 作为函数返回值 作为函数参数 函数嵌套 名称空间和作用域 内置名称空间:内置方法 全局名称空间:除了内置和局部就是全局 局部名称空间:函数内部的变量和函数 执…
1.前言 函数也是一个对象,从而可以增加属性,使用句点来表示属性. 如果内部函数的定义包含了在外部函数中定义的对象的引用(外部对象可以是在外部函数之外),那么内部函数被称之为闭包. 2.装饰器 装饰器就是包装原来的函数,从而在不需要修改原来代码的基础之上,可以做更多的事情. 装饰器语法如下: @deco2 @deco1 def func(arg1,arg2...): pass 这个表示了有两个装饰器的函数,那么表示的含义为:func = deco2(deco1(func)) 无参装饰器语法如下:…
li = [11,22,33,44]def f1(arg): arg.append(55)#函数默认返回值None,函数参数传递的是引用li = f1(li) print(li)   内置函数补充: 判断是否被调用 def f1():     pass print(callable(f1)) ASCII码与数字转换 #数字转换为ASCII码r = chr(65)print(r)#ASCII转换为数字n = ord('a')print(n) 随机验证码 import randomlist_temp…
没有参数的函数及return操作 def test1(): print ("welcome") def test2(): print ("welcomt test2") def test3(): print("welcome test3") ,,,["test3","retest"] x = test1() #test1()表示执行,将执行结果(返回值)赋给变量x,会自动执行,并且由于test1 没有返回值…