资讯详情

装饰器(一)

练习,不断练习

#!/usr/bin/python3 # -*- coding: UTF-8 -*- """ @File:study.py @Description: 描述 @Author:yeqinfang @Email:yeqinfang@yeah.net @Date: 2020/05/14 """   # 1.实现网络要求超时重试的装饰,装饰以下功能函数 # 如果要求网络超时或连接超时,请求可以重新发送。如果重试三次后仍然加班,则抛出相应的异常 # # def request_http(url): # import requests # return requests.get(url, timeout=5) print("第一题答:") def tryAgain(func):     num = 0     def wrapped(*args, **kwargs):         nonlocal num         try:             return func(*args, **kwargs)         except:             if num<2:                 num  = 1                 return wrapped(*args, **kwargs)             else:                 print("网络异常:重试三次后仍加班")                 # raise Exception("网络异常:重试三次后仍加班")      return wrapped  @tryAgain def request_http(url):     import requests     print("我出现的次数是要求的次数")     return requests.get(url, timeout=5)  request_http(url="http://www.baidu.com")  # 2.请设计一个装饰器,接收一个int类型的参数number,可用于装饰任何函数, # 如果函数运行时间大于number,打印函数名和函数的运行时间 (面试真题) print("第二题答:") def timeLimit(number):     import time     def timeCount(func):
        def wrapped(*args, **kwargs):
            if not isinstance(number, int):
                raise TypeError("参数number必须是int类型")
            else:
                startTime = time.time()
                func(*args, **kwargs)
                endTime = time.time()
                if endTime - startTime > number :
                    print("{0}的运行时间为:{1}".format(func.__name__,  endTime - startTime))
                else:
                    pass
                    # print("运行正常")
        return wrapped
    return timeCount

@timeLimit(1)
def runTimes(n):
    import time
    time.sleep(n)

runTimes(2)

# 3、 请设计一个装饰器 ,可以给函数扩展登录认证的功能(提示数账号密码,然后进行校验),
# 多个函数同时使用这个装饰器, 调用函数的时候,只要登录成功一次,
# 后续的函数无需再进行登录(默认的认证账号:qwe123,密码:123456)
# (面试真题)

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

status = False

def login(func):

    def wrapped():
        global status
        if not status:
            username = input("username: ").strip()
            password = input("password: ").strip()
            if username==user["username"] and password==user["password"]:
                print("登陆成功!")
                status = True
                func()
            else:
                print('请重新输入:')
        else:
            func()
    return wrapped

@login
def func1():
    import time
    time.sleep(2)
    print('我是func1,你看到了我,说明你已经登陆了系统')

@login
def func2():
    import time
    time.sleep(2)
    print('我是func2,你看到了我,说明你已经登陆了系统')

func1()
func2()



标签: 装饰连接器

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台