python修饰器@的使用

修饰器的作用是接收一个方法,为方法添加一些功能后返回。

需要注意的几点:

  1. 修饰器接收方法后,需要将添加一些功能后的方法返回。
  2. 修饰器可以借用接收方法的参数。
  3. 修饰器可以按顺序多次被使用。

下面,就用之前的文件检索方法,演示修饰器的使用。

#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')

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值