Python基础day-7[闭包,装饰器]
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python基础day-7[闭包,装饰器]相关的知识,希望对你有一定的参考价值。
闭包:
首先说下闭包是什么?
闭包就是在函数内部定义的函数,包含对外部作用域的引用,但不包含全局作用域。因为函数的作用域在定义的时候就固定死了,所以闭包函数有自带作用域和延迟计算的特点。
闭包函数定义:如果一个内部函数,包含了对外部作用域的引用,但是不是包含全局作用域。那么这个函数就被认为是闭包函数。闭包函数可以使用“.__closure__” 来查看闭包函数的属性。下面我们来看一个示例:
def t(): money = 100 def s(): print(money) return s #返回函数s,不是函数执行过的值 c = t() c() print(c.__closure__) #查看属性 执行结果: D:\Python\Python36-32\python.exe E:/Python/DAY-7/day7_笔记.py 100 (<cell at 0x00A4C3D0: int object at 0x60625D20>,) Process finished with exit code 0
函数s就是在函数t中定义的内部函数
函数s引用了一个外部的变量money,但是不是全局变量。则函数s就是一个闭包函数。
装饰器:
装饰器本质可以是任意可调用对象,被装饰的对象也可以是任意可调用对象。
装饰器功能:
在不修改被装饰对象源代码以及调用方式的前提下,为其添加新的功能。
装饰器的语法:
在被装饰对象的正上方的单独一行,@装饰器名字。会把正下方的函数名调用装饰器,处理完返回给函数名。
多个装饰器:谁在上面谁先执行,谁在下面谁先计算。
示例:
import time #导入模块 import random def timmer(func): #装饰器模块 def wrapper(): #定义一个闭包函数wrapper stime = time.time() #闭包函数内 计算index的睡眠时间 ,这里是开始计算 func() #执行index的函数内容 stptime = time.time() #index的函数执行完毕后的停止时间 print(‘run time is %s‘%(stptime-stime)) #打印运行了多久 return wrapper() def index(): #定义函数index time.sleep(random.randrange(1,2)) #函数内执行睡一定时间,然后打印 欢迎信息 print(‘welecome to index page‘) index = timmer(index) #调用装饰器 运行结果: D:\Python\Python36-32\python.exe E:/Python/DAY-7/tmp.py welecome to index page run time is 1.0000858306884766 Process finished with exit code 0
上面这个是最简单的装饰器示例。如果我们还要传参,让用户感觉不出装饰器的怎么办?我们来看下面的。
示例:
import time import random #装饰器 def timmer(func): def wrapper(*args,**kwargs): #接受可变长参数 start_time = time.time() res=func(*args,**kwargs) #接收保存对应函数 的return 返回值 stop_time=time.time() print(‘run time is %s‘ %(stop_time-start_time)) return res #执行完毕 return 函数的返回值 return wrapper #被装饰函数 @timmer #使用@方式调用装饰器 def index(): time.sleep(random.randrange(1,5)) print(‘welecome to index page‘) @timmer def home(name): #需求一个传入参数 time.sleep(random.randrange(1,3)) print(‘welecome to %s HOME page‘ %name) return 123123123123123123123123123123123123123123 #return 有返回值 index() #调用 无参数传入 print(home(‘abc‘)) #调用传入参数‘abc’ 执行结果: D:\Python\Python36-32\python.exe E:/Python/DAY-7/tmp.py welecome to index page run time is 2.0000545978546143 welecome to abc HOME page run time is 2.0000154972076416 123123123123123123123123123123123123123123 Process finished with exit code 0
以上是关于Python基础day-7[闭包,装饰器]的主要内容,如果未能解决你的问题,请参考以下文章