python习题,关于装饰器的练习

习题1

看代码写结果:

def warpper(f):
    def inner(*args, **kwargs):
        print(111)
        ret = f(*args, **kwargs)
        print(222)
        return ret

    return inner


@warpper
def func():
    print(333)

运行结果:
111
333
222
555

习题2

编写装饰器,在每次执行被装饰函数之前打印一句话'每次执行被装饰函数之前都得先经过这里',这里根据需求添加代码.

def warpper(f):
    def inner(*args, **kwargs):
        print('每次执行被装饰函数之前都得先经过这里!')
        f(*args, **kwargs)

    return inner


@warpper
def func():
    print('我是函数func')


func()

# 运行结果:
# 每次执行被装饰函数之前都得先经过这里!
# 我是函数func

习题3

为函数编写一个装饰器,把函数的返回值+100然后再返回.

例题

@warpper
def func():
    return 7


result = func()
print(result)

结果:

def warpper(f):
    def inner(*args, **kwargs):
        ret = f(*args, **kwargs)
        return ret + 100

    return inner


@warpper
def func():
    return 7


result = func()
print(result)
# """
# 107
# """
习题4

请实现一个装饰器,通过一次调用是函数重复执行5次

def warpper(f):
    def inner(*args, **kwargs):
        for i in range(5):
            f(*args, **kwargs)

    return inner


@warpper
def func():
    print('in func')


func()
# """
# in func
# in func
# in func
# in func
# in func
# """
习题5

请实现一个装饰器,每次调用函数时,将函数名以及调用此函数的时间节点写入文件中。

函数名通过:函数名.__name__获取
import time


def warpper(f):
    def inner(*args, **kwargs):
        write_file(f.__name__)
        f(*args, **kwargs)

    return inner


def write_file(func_name):
    with open('call_time.txt', encoding='utf-8', mode='a+') as f:
        t = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
        f.write(f'{t} 调用了函数{func_name}\n')


@warpper
def func():
    print('in func')
    return func


if __name__ == '__main__':
    func()
# 运行结果:
# call_time.txt
# 2021-04-17 09:50:09 调用了函数func
# 2021-04-17 09:50:29 调用了函数func
posted @ 2021-04-21 18:32  缘兮Fate  阅读(236)  评论(0)    收藏  举报