python的装饰器简单来说就是函数的一种形式,是为了扩展原来的函数功能而设计的. 装饰器的特别之处在于它的返回值也是一个函数,可以在不改变原有函数代码的基础上添加新的功能 # 先定义一个函数及引用# 思路:# outer 函数相当于 decorator的func参数# outoo 调用decorator,将outer传入到函数当中# 函数返回的是 decorator内部的inner函数 执行outoo相当于执行innerdef decorator(func): def inner(*args,…
装饰器 装饰器就是闭包函数的一种应用场景 一 为何要用装饰器 #开放封闭原则:对修改封闭,对扩展开放 二 什么是装饰器 装饰器他人的器具,本身可以是任意可调用对象,被装饰者也可以是任意可调用对象. 强调装饰器的原则: 1 不修改被装饰对象的源代码 2 不修改被装饰对象的调用方式 装饰器的目标:在遵循1和2的前提下,为被装饰对象添加上新功能 三 装饰器的使用 1. 无参装饰器 def 装饰器名字(func): def wrapper(*args,**kwargs): #func是被装饰的对象,这里…
今日内容 1.有参装饰器 2.无参装饰器 什么是装饰器? 用来为被装饰对象添加新功能的工具. 注:装饰器可以是任意可调用对象,被装饰对象也可以是任意可调用对象. 为何要用装饰器? 开放封闭原则:对修改封闭,对扩展开放 装饰器的实现需要遵循两大原则: 1.不修改被装饰对象的源代码 2.不修改装饰器对象的调用方式 有参装饰器模板: def outter(func): def warpper(*args,**kwargs): res=func(*args,**kwargs) return res re…
一.global与nonlocal #global x = 1 def f1(): global x # 声明此处是全部变量x x = 2 print(x) f1() # 调用f1后,修改了全局变量x = 2 print(x) # 打印结果为2 # nonlocal def f1(): x = 1 def f2(): nonlocal x # 此处声明使用外层函数的变量x x = 2 # 将外层函数进行了修改 print(x) # f2() print(x) # 因为f1()下的x已经被修改,所…
需求:想要在test_func函数前后执行一些代码   1.第一步(定义函数,将调用原函数,使用新函数替换) def test_func(): return 'test_func' def test_wrapper_func(): print 'before' rt = test_func() print 'after' return rt print test_wrapper_func() 2.第二步(原函数可以定义参数) def test_func(): return 'test_func'…
python中的无参装饰器和有参装饰器 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 装饰器特点: 1>.开放封闭原则,即对扩展是开放的,对修改时封闭的: 2>.装饰器本质可以是任意可调用的对象,被装饰的对象也可以是任意可调用对象: 3>.装饰器的功能是在不修改被装饰器对象源代码以及被装饰器对象的调用方式的前提下为其扩展新功能: 4>.装饰器本质是函数,(即装饰其他函数)就是为其他函数添加附加功能. 一.典型装饰器案例 #!/usr/bin/env python…
import time def DecoUserPrint(UserFunc):#定义一个DecoUserPrint接收参数的多重方法 def DecoPrint(): StartTime = time.time() UserFunc()#执行DecoPrint接收的方法 OverTime = time.time() print(OverTime-StartTime) return DecoPrint @DecoUserPrint#为下方的,方法调用装饰器,UserPrint = DecoUse…
一.为什么要有有参装饰器? 来看之前的无参装饰器 # 无参装饰器 def outter(func): def wrapper(*args,**kwargs): start = time.time() res = func(*args,**kwargs) # 我们需要一个变量接受函数的返回值 end = time.time() print("run time is %s" % (end - start)) return res # 我们装饰器的核心是wrapper函数,只需要在wrapp…
一.装饰器 二.装饰器修正1 三.装饰器修正2 四.装饰器的语法糖 五.有参.无参装饰器 六.global与nonlocal 一.装饰器 ''' 1 什么是装饰器 器=>工具 装饰=>指的是为被装饰对象添加新功能 装饰器本身可以是任意可调用的对象=>函数 被装饰的对象也可以是任意可调用的对象=>函数 目标:写一个函数来为另外一个函数添加新功能 2 为何要用装饰器 开放封闭原则: 软件一旦上线就应该对修改封闭,对扩展开放 对修改封闭: 1. 不能修改功能的源代码 2. 也不能修改功能…
一.名称空间和作用域 1.命名空间(Namespace) 命名空间是从名称到对象的映射,大部分的命名空间都是通过 Python 字典来实现的. 命名空间提供了在项目中避免名字冲突的一种方法.各个命名空间是独立的,没有任何关系的,所以一个命名空间中不能有重名,但不同的命名空间是可以重名而没有任何影响. 1.一般有三种命名空间: 内置名称空间(built-in names):存放内置的名字,如len/eval/enumerate/bytes/max/min/sorted/map/filter....…