定义:
1.函数是一个内部函数
2.内部函数使用了外部的一个变量(非全局变量)
def outer(): x=10 def inner(): # 内部函数 print(x+10) #内部函数使用了外部函数的一个变量,所以inner就是闭包函数 return inner() outer()二、装饰器
作用:在不改变原函数的基础上,给原函数加功能
调用方式: @装饰器名
1.简单装饰器def anaything(n): def inner(): # 装饰器首先是一个闭包函数 n() print('13') # 在这里,装饰器的作用是打印13 return inner() @anaything # anaything(a) def a(): print('aaa') # 输出: aaa # 13
在这里,@anaything 就相当于anaything(a),两者是相同的
2. 带参数的装饰器import time def count_time(func): def inner(a,b): start_time = time.time() func(a, b) end_time = time.time() print('总共用时 %s' % (end_time - start_time)) return inner @count_time def add(a,b): print(a * b) time.sleep(2) add(5,8) # 输出: 40 # 总共用时 2.00556230545043953.多层装饰器
import time def show_time(func): # 计算程序执行时间 def inner(a,b): start_time = time.time() time.sleep(2) func(a,b) end_time = time.time() print('花费了 %s' % (end_time - start_time)) return inner def count(func): # 用来打印3333 def inner(a,b): print('3333') func(a,b) return inner @show_time @count def add(a,b): print(a * b) time.sleep(2) add(3,5) # 输出: 3333 # 15 # 花费了 4.010709047317505
注:在程序执行过程当中,没有顺序,同时进行
4.类装饰器import time class show_time(): def __init__(self,func): # __init__,面向对象中初始化方法 self.func = func def __call__(self,a,b): # __call__,面向对象中可调用方法 start_time = time.time() self.func(a,b) time.sleep(2) end_time = time.time() print('总计用时: %s' % (end_time - start_time)) @show_time def add(a,b): time.sleep(2) print(a * b) add(5,8) # 输出: 40 # 总计用时: 4.008551359176636
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)