python装饰器实例

import time


def logger(flag=''):       #显示用flag,默认不显示
    def show_time(func):    #时间打印装饰器
        def inner(*args,**kwargs):
            func(*args,**kwargs)    #所有函数可调用
            print(time.strftime("%Y-%m-%d %H:%M:%S",time.localtime()))
            if flag == 'true':
                print('显示日志')
        return inner
    return show_time


h_title = eval(open('title', 'r').read())

login_flg = False
login_flg_id = ''


@logger('true')
def log_auth(s_id):     #登录认证函数
    global login_flg
    global login_flg_id
    f = eval(open(s_id, 'r').read())
    if login_flg is False:
        while True:
            l_id = input('请输入账号:')
            l_pw = input('请输入密码:')
            if l_id in f.keys() and l_pw == f[l_id]:
                print('登录成功')
                login_flg = True
                login_flg_id = s_id
                break
            else:
                print('账号或密码错误')


def fun_title():
    for t in h_title:
        print(t)


while True:
    fun_title()
    com = input('>>>')
    if com in h_title:
        if login_flg is True and login_flg_id == h_title[com]:
            print('进入目录', com)
        elif login_flg is True and login_flg_id != h_title[com]:
            print('该账号无法进入该目录')
        else:
            log_auth(h_title[com])
            print('登录成功,进入目录', com)
    elif com == 'q':
        login_flg = False
    else:
        print('请输入正确项目')
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Python装饰器是一个可以在不修改函数本身的情况下,在调用函数前后添加额外的功能的一种机制。它可以被用来检测函数的参数,缓存函数的结果,添加日志,授权等。下面是一个使用装饰器实例:@decorator def func(param1, param2): return param1 + param2func(2, 3)上面的代码中,@decorator语句会在调用func()函数之前调用decorator函数,增加额外的功能。 ### 回答2: 装饰器Python中一种特殊的函数,它可以用来修改其他函数的功能。装饰器接受一个函数作为输入,并返回一个新的函数作为输出。通过装饰器,我们可以在不修改原函数代码的情况下,给函数添加新的功能或者修改原有功能。 装饰器有以下几个特点: 1. 装饰器可以用来修改函数的行为,比如在函数执行前后添加一些额外的逻辑。 2. 装饰器是函数的高级用法,在Python中被广泛使用。 3. 装饰器本质上是一个闭包函数,它接受一个函数作为参数,并返回一个新函数。 4. 在使用装饰器时,使用@语法糖可以使得代码更加简洁明了。 下面是一个装饰器实例,用于计算函数的执行时间: ```python import time def calc_time(func): def wrapper(*args, **kwargs): start_time = time.time() result = func(*args, **kwargs) end_time = time.time() print(f"函数 {func.__name__} 执行时间为:{end_time - start_time} 秒") return result return wrapper @calc_time def my_func(n): time.sleep(n) return n result = my_func(3) print(result) ``` 在上述例子中,calc_time是一个装饰器函数,它接受一个函数作为参数,并返回一个新函数。新函数wrapper在原函数执行前后分别记录了开始时间和结束时间,并打印了函数的执行时间。通过@calc_time语法糖,在定义my_func函数时,自动应用了装饰器。最后调用my_func(3)时,装饰器会对my_func函数进行修饰,计算函数的执行时间,并返回结果。 ### 回答3: 装饰器Python中一种特殊的函数,它可以动态地修改其他函数的行为。装饰器本身是一个函数,它接受一个函数作为参数,并返回一个新的函数。装饰器用于在不修改原函数代码的情况下,添加额外的功能或修改原函数的行为。 装饰器通常使用@语法来使用,将其放在要装饰的函数上方。装饰器可以用来进行代码的日志记录、输入参数的验证、性能分析等。实现一个装饰器的基本步骤如下: 1. 创建一个装饰器函数,接受一个函数作为输入参数。 2. 在装饰器函数内部,定义一个嵌套函数,用于实现额外的功能。 3. 在嵌套函数内部,执行原函数,并对原函数的返回结果进行处理。 4. 返回嵌套函数作为装饰器函数的结果。 下面是一个简单装饰器实例: ```python def log_decorator(func): def wrapper(*args, **kwargs): print("开始执行函数") result = func(*args, **kwargs) print("函数执行结束") return result return wrapper @log_decorator def add(a, b): return a + b result = add(3, 5) print(result) ``` 在上面的例子中,我们定义了一个装饰器函数log_decorator。它接受一个函数作为参数,并返回一个新的函数wrapper。在wrapper函数内部,我们首先输出"开始执行函数",然后调用原函数add,并将其返回结果保存在result变量中。最后,我们输出"函数执行结束"并返回result。 当我们调用add函数时,实际上是调用了被装饰过的函数wrapper。这样我们就可以在不修改add函数的情况下,给它添加额外的功能,即输出函数的执行过程。 上述代码的输出结果为: ``` 开始执行函数 函数执行结束 8 ``` 从输出结果可以看出,装饰器成功地在add函数的执行前后进行了额外的操作。这就是装饰器的基本使用方法和作用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值