2020 7.21

一:编写函数,(函数执行时间用time.sleep(n)代表)

import time


def demo1(*args, **kwargs):
    time.sleep(0.2)
    for i in args:
        print("index1-----------{}".format(i), end="\t")
    print()
    for k, v in kwargs.items():
        print("index2----------{}:{}".format(k, v), end="\t")

二:编写装饰器,为函数加上统计时间的功能

def timing(func):
    def wrapper(*args, **kwargs):
        start = time.time()
        result = func(*args, **kwargs)
        stop = time.time()
        print("该程序执行的时间是------%s" % (stop - start))
        return result

    return wrapper
    

三:编写装饰器,为函数加上认证的功能

def login(func):
    def wrapper1(*args, **kwargs):
        user_dict = {}
        while True:
            user_name = input("请输入你的用户名:").strip()
            user_psd = input("请输入你的密码:").strip()
            with open(r"C:\Users\S\Desktop\userland.txt", "rt", encoding="utf-8")as f:
                for line in f:
                    k, v = line.strip("\n").split(":")
                    user_dict[k] = v
            if user_name in user_dict:
                if user_dict[user_name] == user_psd:
                    print("欢迎{}".format(user_name))
                    result1 = func(*args, **kwargs)
                    return result1
                else:
                    print("你输入的密码有误,请重新输入!")
            else:
                print("该用户名不存在。")

    return wrapper1

四:编写装饰器,为多个函数加上认证的功能(用户的账号密码来源于文件),要求登录成功一次,后续的函数都无需再输入用户名和密码

五:编写装饰器,为多个函数加上认证功能,要求登录成功一次,在超时时间内无需重复登录,超过了超时时间,则必须重新登录

import time

user_dict = {}
with open(r"C:\Users\S\Desktop\userdata.txt", "rt", encoding="utf-8")as f:
    for line in f:
        k, v = line.strip("\n").split(":")
        user_dict[k] = v


def login_4(func):
    def wrapper4(*args, **kwargs):
        while True:
             # 记录输入开始时间
            user_name = input("请输入你的用户名:").strip()
            user_psd = input("请输入你的密码:").strip()
            if user_name in user_dict:
                if user_dict[user_name] == user_psd:
                    global began
                    began = time.time()  # 记录登录时间
                    print("欢迎{}".format(user_name))
                    global Tag  # 声明全局变量
                    Tag = False  # 修改recharge函数判断条件
                    result1 = func(*args, **kwargs)
                    return result1
                else:
                    print("你输入的密码有误,请重新输入!")
            else:
                print("该用户名不存在。")

    return wrapper4


@login_4
def recharge():
    while Tag:
        user_name = input("请输入你的用户名:").strip()
        user_psd = input("请输入你的密码:").strip()
        print(user_name)
        print(user_psd)
        login_4(recharge)
    else:
        while True:
            time.sleep(1)
            print("正在执行充值功能.......")
            end = time.time()
            if end > began+5:
                print("你未操作的时间过长,请重新登录!")
                recharge()
            else:
                pass

声明一个空字典,然后在每个函数前加上装饰器,完成自动添加到字典的操作

dic = {}


def addToDict(func):
    def wrapper8(*args, **kwargs):
        i = 1  # 为字典添加索引
        while True:  # 判断索引是否存在
            if i in dic:
                i += 1
            else:
                dic[i] = func.__name__  # 将索引与变量名绑定
                result8 = func()
                return result8

    return wrapper8


@addToDict
def name():
    print("正在将name加入列表")


@addToDict
def weapon():
    print("正在将weapon加入列表")


@addToDict
def gender():
    print("正在将weapon加入列表")


name()
weapon()
gender()

print(dic)

九 编写日志装饰器,实现功能如:一旦函数f1执行,则将消息2017-07-21 11:12:11 f1 run写入到日志文件中,日志文件路径可以指定

注意:时间格式的获取

import time

time.strftime(’%Y-%m-%d %X’)

def writeData(fun1):
    def wrapper9(*args, **kwargs):
        result9 = fun1()
        with open("log.txt", "wt", encoding="utf-8")as f:
            f.write("程序%s于%s启动.............." % (fun1.__name__, time.strftime('%Y-%m-%d %X')))
        return result9

    return wrapper9


@writeData
def f1():
    print("f1正在执行.................")
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值