修飾器的作用是接收一個方法,爲方法添加一些功能後返回。
需要注意的幾點:
- 修飾器接收方法後,需要將添加一些功能後的方法返回。
- 修飾器可以借用接收方法的參數。
- 修飾器可以按順序多次被使用。
下面,就用之前的文件檢索方法,演示修飾器的使用。
#coding:utf-8
"""
Note:
獲取文件的改變
Author:redsun
Data:2019/7/10
"""
import re
import time
import os
def WarpperHead(fun):
'''
給函數添加最外層修飾
:param fun: 被修飾的函數名
:return:
'''
def HelpInfoHead( File_Path, KeyWord):
'''
外層修飾
:param File_Path: 參數
:param KeyWord: 參數
:return:
'''
file_name = os.path.basename(File_Path)
print('---'* 20)
print('Search File ({file_name}) about "({KeyWord})" Info ...'.format(file_name=file_name, KeyWord = KeyWord).title())
print(GetTime())
# 修飾的函數傳遞
fun(File_Path, KeyWord)
print ('End'.center(60))
print('---'* 20)
# 返回返回調用
return HelpInfoHead
def WarpperContent(fun):
def HelpInfoContent(*args):
'''
參數的傳遞
:param args:
:return:
'''
print('***' * 20)
fun(*args)
print('***' * 20)
return HelpInfoContent
def GetTime():
'''
返回當前時間
:return:
'''
return time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(time.time()))
@WarpperHead
@WarpperContent
def GetFileKeyInfo(File_Path, KeyWord):
'''
檢索文件中與關鍵字相關的行,並輸出
:param File_Path: 文件路徑
:param KeyWord: 關鍵字
:return: 輸出關鍵字所在的行
'''
with open(File_Path) as f:
lines = f.readlines()
if len(lines) == 0:
print("日誌文件爲空".center(50, '='))
else:
count = 0
text = ''
for line in lines:
rs = re.search(KeyWord, line)
if rs:
count += 1
text += line
print('[命中{count}次]'.format(count=count))
print(text)
GetFileKeyInfo('E:\\TestCode\\PyCharmProjects\\xiaoxiang\\PrintFIileChange\\word', 'uiui')