zoukankan      html  css  js  c++  java
  • 练习 : 高阶函数

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

    def add_after(fn):
        def test(*args, **kwargs):
            fn(*args, **kwargs)
            print('after')
        return test
    

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

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

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

    def tag(fn):
        def test(*args, **kwargs):
            fn(*args, **kwargs)
            sum1 = '<p>' + fn(*args, **kwargs) + '</p>'
            return sum1
        return test
    
    
    @tag
    def render(text):
        # 执行其他操作
        return text
    
    
    @tag
    def render2():
        return 'abc'
    
    
    print(render('Hello'))   # 打印出: <p>Hello</p>
    print(render2())  # 打印出: <p>abc</p>
    

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

    def tag(name):
        def tag1(fn):
            def test(*args, **kwargs):
                fn(*args, **kwargs)
                sum1 = '<{name}>{fn1}</{name}>'.format(name=name, fn1=fn(*args, **kwargs))
                return sum1
            return test
        return tag1
    
    
    @tag(name='p')
    def render(text):
        # 执行其他操作
        return text
    
    
    @tag(name='div')
    def render2():
        return 'abc'
    
    
    print(render('Hello'))   # 打印出: <p>Hello</p>
    print(render2())     # 打印出: <div>abc</div>
    

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

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

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

    def add_num(fn):
        def test(flag, *args, **kwargs):
            n = fn(*args, **kwargs)
            if flag:
                return n + 100
            elif not flag:
                return n - 100
        return test
    
    
    @add_num
    def sum1(x, y):
        return x + y
    
    
    print(sum1(False, 10, 20))
    
  • 相关阅读:
    leetcode108 Convert Sorted Array to Binary Search Tree
    leetcode98 Validate Binary Search Tree
    leetcode103 Binary Tree Zigzag Level Order Traversal
    leetcode116 Populating Next Right Pointers in Each Node
    Python全栈之路Day15
    Python全栈之路Day11
    集群监控
    Python全栈之路Day10
    自动部署反向代理、web、nfs
    5.Scss的插值
  • 原文地址:https://www.cnblogs.com/anjhon/p/11892628.html
Copyright © 2011-2022 走看看