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