python自动化2021/04/07 闭包与装饰器

#在计算机科学中,闭包(英语:Closure),又称词法闭包(Lexical Closure)或函数闭包(function closures),
# 是引用了自由变量的函数。这个被引用的自由变量将和这个函数一同存在,即使已经离开了创造它的环境也不消失。
# 所以,有另一种说法认为闭包是由函数和与其相关的引用环境组合而成的实体。
# 闭包在运行时可以有多个实例,不同的引用环境和相同的函数组合可以产生不同的实例。
#简单来说就是一个函数定义中引用了函数外定义的变量,并且该函数可以在其定义环境外被执行。这样的一个函数我们称之为闭包。
#1:
# def outer():
# x = 10
# def inner():
# print(x)
# return inner
#
# func = outer()
# func()

#2:
# def outer(x):
# # x = 10
# def inner():
# print(x)
# return inner
#
# func = outer(20)
# func()



#价值:能够动态灵活的创建以及传递函数,体现出函数式编程的特点。
# 所以在一些场合,我们就多了一种编码方式的选择,适当的使用闭包可以使得我们的代码简洁高效。

#装饰器
import time

def timer(func):
def inner():
start = time.time()
func()
end = time.time()
print("花费时间:", end - start)
return inner

def bar():
print("bar功能")
time.sleep(3)

@timer # 等同于 foo = timer(foo)
def foo():
print("foo功能")
time.sleep(2)



# foo = timer(foo)
foo()

# bar = timer(bar)
bar()
posted @ 2021-04-08 11:08  lpaxq  阅读(58)  评论(0编辑  收藏  举报