0112 装饰器

什么是装饰器?
以@开头,装饰器是在函数调用之上的修饰器,在不改变项目原有代码的基础上,增加一些额外的功能
内函数与外函数
在一个外函数中 定义了一个内函数
内函数运用了 外函数的临时变量
外函数的返回值 是内函数的引用

def outter(args):
    print("-------------")
    def inner():
        print("=============")
        args()
        print("=============")
    return inner
    
@outter
def demo():
    print("1233")

demo()

输出得:

-------------
=============
1233
=============

示例-更新登录日志到log文件

def outter(args):
    def inner(username,password):
        #存日志信息
        info = ",".join([str(datetime.datetime.now()),username,password])
        with open("login.log",mode='a') as f:
            f.write(info+"\n")#输入信息,换行
        r = args(username,password)
        #存日志信息
        if r:
            r = "登录成功"
        else:
            r = "登录失败"
        info = ",".join([str(datetime.datetime.now()), username, password,r])
        with open("login.log", mode='a') as f:
            f.write(info+"\n")
    return inner

@outter
def login(username,password):
    flag = False
    if username == "admin" and password == "123456":
        flag = True
        print("登录成功")
    else:
        print("登录失败")
    return flag
username = input("请输入用户名:")
password = input("请输入密码:")
login(username,password)

方法2.写入excel中

import datetime
import xlrd
from xlutils.copy import copy
def outter(args):
    def inner(username,password):
        #存日志信息
        # info = ",".join([str(datetime.datetime.now()),username,password])
        # with open("login.log",mode='a') as f:
        #     f.write(info+"\n")
        book = xlrd.open_workbook("登录信息.xls")
        sheet = book.sheet_by_index(0)
        book_copy = copy(book)
        sheet_copy = book_copy.get_sheet(0)
        sheet_copy.write(sheet.nrows,0,str(datetime.datetime.now()))
        sheet_copy.write(sheet.nrows, 1, username)
        sheet_copy.write(sheet.nrows, 2, password)
        book_copy.save("登录信息.xls")
        r = args(username,password)
        #存日志信息
        if r:
            r = "登录成功"
        else:
            r = "登录失败"
        # info = ",".join([str(datetime.datetime.now()), username, password,r])
        # with open("login.log", mode='a') as f:
        #     f.write(info+"\n")

        book = xlrd.open_workbook("登录信息.xls")
        sheet = book.sheet_by_index(0)
        book_copy = copy(book)
        sheet_copy = book_copy.get_sheet(0)
        sheet_copy.write(sheet.nrows, 0, str(datetime.datetime.now()))
        sheet_copy.write(sheet.nrows, 1, username)
        sheet_copy.write(sheet.nrows, 2, password)
        sheet_copy.write(sheet.nrows, 3, r)
        book_copy.save("登录信息.xls")
    return inner
@outter
def login(username,password):
    flag = False
    if username == "admin" and password == "123456":
        flag = True
        print("登录成功")
    else:
        print("登录失败")
    return flag
username = input("请输入用户名:")
password = input("请输入密码:")
login(username,password)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值