一、闭包与装饰器
高阶函数有2条件满足其中一个都叫高阶函数
1. 函数可以作为参数输入
2. 函数可以作为返回值
1、闭包
介绍
如果在一个内部函数里,对在外作用域(但不是在全局作用域)的变量进行引用,那么内部函数就被认为是闭包
闭包 = 内部函数 + 定义函数时的环境
def f(): x = 10 def g(): print(x) return g h = f() h() # 对x=10进行了延伸 h() h() h()
2、装饰器
时间戳:指1970年01月01日00时00分00秒起到现在的总秒数,能唯一地标识某一刻时间
装饰器:装饰就是添加一个新的功能,为你之前的某个函数添加新的功能
def foo(): print("foo....")
show_time 装饰器: 功能是给 函数增加计算时间功能
def show_time(func): # 只能计算foo的时间 def inner(): start = time.time() func() end = time.time() print(f"运行了{end - start}秒") return inner
foo = show_time(foo) # 给foo扩展时间功能
foo()
python提供了更优雅的语法题 @
@show_time # 帮你做这个事 foo = show_time(foo) def foo(): print("foo....") foo()
1.0模板 只能对无参的扩展
def show_time(func): def inner(): start = time.time() func() end = time.time() print(f"运行了{end - start}秒") return inner
2.0模板 参数无所谓版本
def show_time(func): def inner(*args,**kwargs): start = time.time() func(*args,**kwargs) # 原函数 end = time.time() print(f"运行了{end - start}秒") return inner # 新函数
3.0版本 返回值无所谓版本
def show_time(func): # func原函数 def inner(*args,**kwargs): # inner是新函数 。。。。。扩展实现区域 res = func(*args,**kwargs) # 保证原函数功能 。。。。。扩展实现区域 return res # 返回原函数的返回值 return inner # 返回新函数