| 
                         祭奠碌碌无为的2018,想想其实也不算碌碌无为,至少我还搞懂了装饰器,写了一堆有用没用的玩意 
原来觉得装饰器挺难的,直到2018年的最后几天,突然就明白了,难道这就是传说中的开天聪么 
言归正传,之所以觉得装饰器难,是因为这东西不按套路出牌,希望大家看完我写的也能在新的一年里有所收货吧 
先说下要实现的功能,写一个装饰器,让装饰器可以把时间加到日志的行首,例如 
20190101 000001 write log first values 
20190101 000001使用装饰器写入,而write log first values使用函数写入 
首先写一个正常的写入日志的函数 
函数介绍:一段简单的函数,只是将values写入并返回,看起来像脱了裤子放屁,先这样,后面调用装饰器的时候是需要用这个函数的 
测试下函数 
write_values = 'write log first values' 
result = write_log(write_values) 
print result 
正常写入,查看文件内容 
write log first values 
因为需要写入时间,所以还需要一个写入处理时间的函数 
== = time_result
函数介绍:将当前日期转换成需要的日期格式 
测试下函数 
now = now_time() 
print now 
结果是 
20190101 013041 
日期正常,再来写个装饰器函数 
敲小黑板,这里是重点,重点,重点,重要的事情说三遍--------------------------------------------------------- 
= insert_time
函数介绍:首先定义了一个装饰器函数,传入了一个参数是func1,之所以说装饰器不按套路出牌这里是诡异地方1,这里传入的func1参数其实是个函数,并不是我们平常认为的一个字符串或者list什么的,接下来是装饰器里面的函数,这个函数是装饰器的功能函数,也就是装饰器需要实现的功能在这里实现。说一下insert_time的功能,获取到当前时间,并且把当前时间拼到传入的函数前面返回。最后最外层是返回inser_time函数,即将拼接好的结果返回 
测试下函数,这里需要全部的函数了,现在把全部函数都放进来,存成一个文件叫zsq.py 
<span style="color: #0000ff">import<span style="color: #000000"> time 
<span style="color: #008000">#<span style="color: #008000"> 日期时间函数 
<span style="color: #0000ff">def<span style="color: #000000"> now_time(): 
local_time =<span style="color: #000000"> time.localtime(time.time()) 
time_format = <span style="color: #800000">'<span style="color: #800000">%Y%m%d %H%M%S<span style="color: #800000">'<span style="color: #000000"> 
time_result =<span style="color: #000000"> time.strftime(time_format,local_time) 
<span style="color: #0000ff">return<span style="color: #000000"> time_result 
<span style="color: #008000">#<span style="color: #008000"> 装饰器函数 
<span style="color: #0000ff">def<span style="color: #000000"> add_time_line_start(): 
<span style="color: #0000ff">def<span style="color: #000000"> insert_time(): 
now =<span style="color: #000000"> now_time() 
<span style="color: #0000ff">return now + <span style="color: #800000">' <span style="color: #800000">' +<span style="color: #000000"> func1() 
<span style="color: #0000ff">return<span style="color: #000000"> insert_time 
<span style="color: #008000">#<span style="color: #008000">调用装饰器 
<span style="color: #000000">@add_time_line_start 
<span style="color: #008000">#<span style="color: #008000">看起来没什么用的函数 
<span style="color: #0000ff">def<span style="color: #000000"> write_log(values): 
<span style="color: #0000ff">return<span style="color: #000000"> values 
write_values = <span style="color: #800000">'<span style="color: #800000">write log first values<span style="color: #800000">'<span style="color: #000000"> 
result =<span style="color: #000000"> write_log(write_values) 
<span style="color: #0000ff">print result 
这里看到了调用装饰器是使用的@方法,(write_log())这种方法,这也就是装饰器不按套路出牌这里是诡异地方2 
 print write_log(write_values)TypeError: insert_time() takes no arguments (1 given) 
<div class="cnblogs_code"> 
<span style="color: #0000ff">import<span style="color: #000000"> time 
<span style="color: #008000">#<span style="color: #008000"> 日期时间函数 
<span style="color: #0000ff">def<span style="color: #000000"> now_time(): 
local_time =<span style="color: #000000"> time.localtime(time.time()) 
time_format = <span style="color: #800000">'<span style="color: #800000">%Y%m%d %H%M%S<span style="color: #800000">'<span style="color: #000000"> 
time_result =<span style="color: #000000"> time.strftime(time_format,local_time) 
<span style="color: #0000ff">return<span style="color: #000000"> time_result 
<span style="color: #008000">#<span style="color: #008000"> 装饰器函数 
<span style="color: #0000ff">def<span style="color: #000000"> add_time_line_start(func1): 
<span style="color: #0000ff">def<span style="color: #000000"> insert_time(self): 
now =<span style="color: #000000"> now_time() 
<span style="color: #0000ff">return now + <span style="color: #800000">' <span style="color: #800000">' +<span style="color: #000000"> func1(self) 
<span style="color: #0000ff">return<span style="color: #000000"> insert_time 
<span style="color: #008000">#<span style="color: #008000">调用装饰器 
<span style="color: #000000">@add_time_line_start 
<span style="color: #008000">#<span style="color: #008000">看起来没什么用的函数 
<span style="color: #0000ff">def<span style="color: #000000"> write_log(values): 
<span style="color: #0000ff">return<span style="color: #000000"> values 
<span style="color: #0000ff">def<span style="color: #000000"> write_log1(values): 
<span style="color: #0000ff">return<span style="color: #000000"> values 
write_values = <span style="color: #800000">'<span style="color: #800000">write log first values<span style="color: #800000">'<span style="color: #000000"> 
result =<span style="color: #000000"> write_log1(write_values) 
<span style="color: #0000ff">print result  
再测试下 
                        (编辑:莱芜站长网) 
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! 
                     |