
定义:
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.0055623054504395
3.多层装饰器
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条)