一、闭包
1.闭包的三要素
1.外部函数嵌套内部函数
2.内部函数可以调用外部函数的局部变量
3.外部函数返回内部函数
2.示例代码
# 外部函数
def func1():
print("func1")
# 内部函数
def func2():
print("func2")
# 外部函数返回内部函数
return func2
r = func1() # 起始这里是 r = func2 是一个函数
print(type(r))
r() # 其实这里是 func2()
二、装饰器
装饰器是建立在闭包的基础上的,在闭包内调用想要被装饰的函数。
1.无参装饰器
格式;写完装饰器之后,在想要被装饰的函数上方写上 @装饰器名
import random
import time
# 装饰器 形参是一个函数
def use_time(func):
def time_cost():
star = time.time()
func()
print(f"{func.__name__}使用时间:{time.time() - star}")
return time_cost
# 使用两个内容一样的数列,用来对比排序花费的时间
datas = [random.randint(1, 500) for i in range(1000)]
datas_copy = datas.copy()
@use_time
def my_fun1():
datas.sort()
print(datas)
@use_time
def my_fun2():
new_datas_copy = sorted(datas_copy)
print(new_datas_copy)
my_fun1()
my_fun2()
2.带参装饰器
格式:@装饰器名(参数)
def replace(times):
def wake(func):
def up(*args):
for i in range(times):
print("闹钟响了")
func(*args)
print("闹钟关闭")
print("--------------")
return up
return wake
@replace(5)
def wake_up(name):
print(f"{name}快起床啦~~~")
wake_up("布布") # 打印5遍 闹钟响了
# 布布快起床啦
# 闹钟关闭
标签:闭包,函数,python,datas,time,print,装饰,def
From: https://blog.csdn.net/2201_76129403/article/details/140629196