• 装饰器


    闭包:内部函数使用外部函数中的变量,这种情况下就称这是一个闭包。

    def f1(b):
        def f2():
            print(b)
        f2()
        return f2
    ff=f1('bbb')
    ff()
    # bbb
    # bbb
    def f1():
        b=10
        def f2():
            return b
        return f2()
    print(f1())
    # 10

    装饰器:在不改变函数的调用方式的情况下,给函数的前后添加新的功能。

    装饰器的固定结构:

    def wrapper(func):
        def inner(*args,**kwargs):
            """被装饰器执行之前要添加的代码"""
            ret=func(*args,**kwargs)
            """被装饰器执行之后要添加的代码"""
            return ret
        return inner

    装饰器的例子:

    def wrapper(func):
        def inner(*args,**kwargs):
            print('小峰')  # 被装饰器函数执行之前要添加的代码
            ret=func(*args,**kwargs)
            print('小明')  # 被装饰器函数执行之后要添加的代码
            return ret
        return inner
    @wrapper
    def func(name):
        print('%s好,才是真的好'%(name))
    @wrapper
    def fun1():
        print()
    func('小峰')
    print('=='*10)
    print(func('小方'))
    
    # 小峰
    # 小峰好,才是真的好
    # 小明
    # ====================
    # 小峰
    # 小方好,才是真的好
    # 小明
    # None

    概念:开放封闭原则

        开放是指:对扩展是开放的

        封闭是指:对修改是封闭的

     装饰器的升阶:

    def wrapper1(func):
        def inner1(*args,**kwargs):
            print('in wrapper 1,before')
            ret = func(*args,**kwargs)   #qqxing
            print('in wrapper 1,after')
            return ret
        return inner1
    def wrapper2(func):     #inner1
        def inner2(*args,**kwargs):
            print('in wrapper 2,before')
            ret = func(*args,**kwargs)   #inner1
            print('in wrapper 2,after')
            return ret
        return inner2
    @wrapper2
    @wrapper1
    def qqxing():
        print('qqxing')
    qqxing()    #inner2
    
    # in wrapper 2,before
    # in wrapper 1,before
    # qqxing
    # in wrapper 1,after
    # in wrapper 2,after
  • 相关阅读:
    整型表示
    有一头母牛,它每年年初生一头小母牛。每头小母牛从第四个年头开始,每年年初也生一头小母牛。请编程实现在第n年的时候,共有多少头母牛?
    shell排序算法实现
    一些小细节
    wordpress新注册用户或重置密码链接失效
    wordpress访问速度慢
    mysql主从复制
    mysql root密码忘记
    mysql root用户登录后无法查看数据库全部表
    Ansible
  • 原文地址:https://www.cnblogs.com/hzhcdhm/p/7773841.html
Copyright © 2020-2023  润新知