闭包的概念
1、在一个函数内部对外部变量进行引用
2、一般外部函数返回值为内部函数,那么内部函数被认为是闭包
将test函数作为入参到run_time1中,执行内部函数wrapper,返回wrapper中返回的函数
def run_time1(func):
def wrapper():
print("没有带参数")
return func()
return wrapper
@run_time1
def test():
print(r'hello,it\'s me')
if __name__ == '__main__':
test()
装饰器是一种闭包应用
以下例子wrapper为内部函数、run_time为外部函数
func为外部的变量,在wrappeer内进行引用
run_time返回值wrapper是内部函数
将person函数作为入参到run_time,执行内部函数wrapper,返回wrapper中返回的函数
带参数的函数使用装饰器只需要使用不定长参数接收即可
import time as t
#带参数的
def run_time(func):
def wrapper(*args, **kwargs):
print(t.ctime())
return func(*args, **kwargs)
return wrapper
@run_time
def person(name):
print("我的名字叫{}".format(name))
if __name__ == '__main__':
person("张三")
装饰器带参数
def run_time2(level):
print("level:{}time:{}".format({level},t.ctime()))
def outwrapper(func):
def wrapper(*args,**kwargs):
print("我的名字{}".format(*args))
return func(*args,**kwargs)
return wrapper
return outwrapper
@run_time2("DEBUG")
def person(name):
print(name)
if __name__ == '__main__':
person("张三")
展示结果:
level:DEBUGtime:Mon Apr 19 18:17:24 2021
我的名字张三
张三