作业-第十一天(python“三大神器之装饰器”)

1. 为函数写一个装饰器,在函数执行之后输出 after


def li(fn):
    def test(*args, **kwargs):
        re = fn(*args, **kwargs)
        print('after')
        return re

    return test


@li
def li_sum1(x, y):
    print(x + y)


li_sum1(10, 20)

# 结果
30
after

Process finished with exit code 0

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

def add_100(fn):
    def test(*args, **kwargs):
        re = fn(*args, **kwargs)
        return re + 100

    return test


@add_100
def li_sum1(x, y):
    return x + y


print(li_sum1(10, 20))

#结果
130

Process finished with exit code 0

3. 写一个装饰器@tag要求满足如下功能:

@tag
def render(text):
# 执行其他操作
return text

@tag
def render2():
return 'abc'

print(render('Hello')) # 打印出:

Hello


print(render2()) # 打印出:

abc

def tag(fn):
    def test(*args, **kwargs):
        re = fn(*args, *kwargs)
        return '

' + re + '

' return test @tag def render(x): return x @tag def render2(): return 'abc' print(render('hello')) print(render2())

结果:

hello

abc

Process finished with exit code 0

4. 写一个装饰器@tag要求满足如下功能(需要使用带参的装饰器,自己先自学正在一下):

@tag(name='p')
def render(text):
# 执行其他操作
return text

@tag(name='div')
def render2():
return 'abc'

print(render('Hello')) # 打印出:

Hello


print(render2()) # 打印出:
abc

def tag1(name):
    def tag(fn):
        def test(*args, **kwargs):
            re = fn(*args, *kwargs)
            if name == 'p':
                return '

' + re + '

' elif name == 'div': return '
' + re + '
' return test return tag @tag1(name='p') def render(x): return x @tag1(name='div') def render2(): return 'abc' print(render('hello')) print(render2())

5. 为函数写一个装饰器,根据参数不同做不同操作。

flag为True,则 让原函数执行后返回值加100,并返回。
flag为False,则 让原函数执行后返回值减100,并返回。

def li2(flag):
    def li3(fn):
        def test(*args, **kwargs):
            re = fn(*args, **kwargs)
            if flag == 'True':
                return re + 100
            elif flag == 'False':
                return re - 100
            else:
                return re
        return test
    return li3


@li2('True')
def li4(x, y):
    return x + y


print(li4(10, 20))

你可能感兴趣的:(作业-第十一天(python“三大神器之装饰器”))