(end - start).total_seconds()# total.seonds 总秒数# end 减去 start 获取运行的秒数# 返回结果:2.180956
defadd(x, y):#print(add.__name__, x, y) # 这个只能记录add,sub呢?#time.sleep(2) # 修秒2秒return x + y
deflogger(fn):
ret = fn(4,5)return ret
logger(add)# base版,基于这版,增加功能、# 返回结果:9
defadd(x, y):#print(add.__name__, x, y) # 这个只能记录add,sub呢?#time.sleep(2)return x + y
deflogger(fn, x, y):
ret = fn(x, y)return ret
logger(add,4,5)# 返回结果:9
defadd(x, y):#print(add.__name__, x, y) # 你这个只能记录add,sub呢?#time.sleep(2)return x + y
deflogger(fn, x, y):print(fn.__name__, x, y)# 增加记录值
ret = fn(x, y)return ret
logger(add,4,5)# 返回结果:add 4 5# 返回结果:9
defadd(x, y):#mylog(add.__name__, x, y) # 你这个只能记录add,sub呢?#time.sleep(2)return x + y
defsub(x, y):# 可以用于多个函数return x - y
deflogger(fn, x, y):print(fn.__name__, x, y)# 增加记录值
ret = fn(x, y)return ret
logger(add,4,5)
logger(sub,5,6)# 返回结果:add 4 5# 返回结果:sub 5 6# 返回结果:-1
defadd(x, y):#mylog(add.__name__, x, y) # 你这个只能记录add,sub呢?#time.sleep(2)return x + y
defsub(x, y, z):# 可以用于多个函数return x - y - z
deflogger(fn,*args,**kwargs):# 接受关键字传参,位置传参。print(fn.__name__, args, kwargs)# 增加记录值print('执行前可以做的事情,增强')
ret = fn(*args,**kwargs)print('执行后可以做的事情,增强')return ret
logger(add,4, y=8)
logger(sub,5,6, z=7)# 返回结果:add (4,) {'y': 8}# 返回结果:执行前可以做的事情,增强# 返回结果:执行后可以做的事情,增强# 返回结果:sub (5, 6) {'z': 7}# 返回结果:执行前可以做的事情,增强# 返回结果:执行后可以做的事情,增强# 返回结果:-8
defadd(x, y):#mylog(add.__name__, x, y) # 你这个只能记录add,sub呢?#time.sleep(2)return x + y
defsub(x, y, z):# 可以用于多个函数return x - y - z
deflogger(fn):definner(*args,**kwargs):print(fn.__name__, args, kwargs)# 增加记录值print('执行前可以做的事情,增强')
ret = fn(*args,**kwargs)print('执行后可以做的事情,增强')return ret
return inner
logger(add)(4, y=8)#logger(sub, 5, 6, z=7)# 返回结果:add (4,) {'y': 8}# 返回结果:执行前可以做的事情,增强# 返回结果:执行后可以做的事情,增强# 返回结果:12
defadd(x, y):#time.sleep(2)return x + y
defsub(x, y, z):# 可以用于多个函数return x - y - z
deflogger(fn):definner(*args,**kwargs):print('执行前可以做的事情,增强', fn.__name__, args, kwargs)
ret = fn(*args,**kwargs)print('执行后可以做的事情,增强')return ret
return inner
logger(add)(4, y=8)#logger(sub, 5, 6, z=7)# 返回结果:执行前可以做的事情,增强 add (4,) {'y': 8}# 返回结果:执行后可以做的事情,增强# 返回结果:12
defadd(x, y):#time.sleep(2)return x + y
defsub(x, y, z):# 可以用于多个函数return x - y - z
deflogger(fn):# fn adddefinner(*args,**kwargs):print('执行前可以做的事情,增强', fn.__name__, args, kwargs)
ret = fn(*args,**kwargs)# fn(4, y=8) add(4, y=8)print('执行后可以做的事情,增强')return ret
return inner
t = logger(add)# t = innerprint(t(4, y=8))# inner(4, y=8)# 返回结果:执行前可以做的事情,增强 add (4,) {'y': 8}# 返回结果:执行后可以做的事情,增强# 返回结果:12
defadd(x, y):#time.sleep(2)return x + y
deflogger(fn):# fn adddefinner(*args,**kwargs):print('执行前可以做的事情,增强', fn.__name__, args, kwargs)
ret = fn(*args,**kwargs)# fn(4, y=8) add(4, y=8)print('执行后可以做的事情,增强')return ret
return inner
#t = logger(add) # t = inner#print(t(4, y=8)) # inner(4, y=8)
add = logger(add)print(add(4,5))# 返回结果:执行前可以做的事情,增强 add (4, 5) {}# 返回结果:执行后可以做的事情,增强# 返回结果:9
defadd(x, y):#time.sleep(2)return x + y
deflogger(fn):# fn adddefinner(*args,**kwargs):print('执行前可以做的事情,增强', fn.__name__, args, kwargs)
ret = fn(*args,**kwargs)# fn(4, y=8) add(4, y=8)print('执行后可以做的事情,增强')return ret
return inner
#t = logger(add) # t = inner#print(t(4, y=8)) # inner(4, y=8)print(hex(id(add)))# 打印add的id值
add = logger(add)print(add(4,5))print(add.__closure__)# 查看add的closure中记录闭包# 返回结果:0x10954fd80# 返回结果:执行前可以做的事情,增强 add (4, 5) {}# 返回结果:执行后可以做的事情,增强# 返回结果:9# 返回结果:(<cell at 0x1083e3d90: function object at 0x10954fd80>,)
deflogger(fn):# fn adddefinner(*args,**kwargs):print('执行前可以做的事情,增强', fn.__name__, args, kwargs)
ret = fn(*args,**kwargs)# fn(4, y=8) add(4, y=8)print('执行后可以做的事情,增强')return ret
return inner
@logger# 装饰器 #等价式, add = logger(add) # logger应该等效为单参函数defadd(x, y):#time.sleep(2)return x + y
#t = logger(add) # t = inner#print(t(4, y=8)) # inner(4, y=8)#add = logger(add)print(add(4,5))# @装饰器语法,@标识符,把这一行下面一行的def定义的标识符作为其实参传入,返回值覆盖了下面这个标识符# 返回结果:执行前可以做的事情,增强 add (4, 5) {}# 返回结果:执行后可以做的事情,增强# 返回结果:9
deflogger(fn):definner(*args,**kwargs):print('执行前可以做的事情,增强', fn.__name__, args, kwargs)
ret = fn(*args,**kwargs)print('执行后可以做的事情,增强')return ret
return inner
@logger# 装饰器 #等价式, add = logger(add) # logger应该等效为单参函数defadd(x, y):#time.sleep(2)return x + y
print(add(4,5))# 非侵入代码,完成了功能,并且好像从来没有装饰过一样print(add.__name__)#add实际是inner# 返回结果:执行前可以做的事情,增强 add (4, 5) {}# 返回结果:执行后可以做的事情,增强# 返回结果:9# 返回结果:inner
deflogger(wrapped):defwrapper(*args,**kwargs):print('执行前可以做的事情,增强', wrapped.__name__, args, kwargs)
ret = wrapped(*args,**kwargs)print('执行后可以做的事情,增强')return ret
return wrapper
@logger# 装饰器 #等价式, add = logger(add) # logger应该等效为单参函数defadd(x, y):#time.sleep(2)return x + y
print(add(4,5))# 非侵入代码,完成了功能,并且好像从来没有装饰过一样print(add.__name__)# 返回结果:执行前可以做的事情,增强 add (4, 5) {}# 返回结果:执行后可以做的事情,增强# 返回结果:9# 返回结果:wrapper
deflogger(wrapped):defwrapper(*args,**kwargs):
start = datetime.datetime.now()
ret = wrapped(*args,**kwargs)
delta =(datetime.datetime.now()- start).total_seconds()print("{} tooks {}s.".format(wrapped.__name__, delta))return ret
return wrapper
@logger# 装饰器 #等价式, add = logger(add) # logger应该等效为单参函数defadd(x, y):
time.sleep(2)return x + y
print(add(4,5))# 非侵入代码,完成了功能,并且好像从来没有装饰过一样print(add.__name__)# 返回结果:add tooks 2.002051s.# 返回结果:9# 返回结果:wrapper