zoukankan      html  css  js  c++  java
  • 闭包和装饰器

    gloab和nonlocal

    glob:在局部作用域中使用全局变量
    nonlocal:主要用于函数嵌套时,使用外层函数的变量

    闭包

    函数内部定义的函数称为内部函数,该内部函数包含对外部(上层)作用域,而不是对全局作用域名字的,那么该内部函数称为闭包函数

    闭包函数的基本形式

    def func1():
        name='hello world'
        def func2():
            print(name)
        return func2
    

    装饰器

    程序源代码的原则:对功能扩展开放,对修改源代码封闭
    即可以在源代码的基础上扩展功能,而不能修改源代码(原因是,系统上线了修改源代码,改错了咋整)
    装饰器就是用来进行源代码功能能扩展的一种实现方式。
    装饰器本质上是任意可调用的对象,目前能够理解的就是是函数,而被装饰的对象也可以是任意可调用的对象。
    装饰器功能:是在不修改被装饰对象源代码以及被装饰对象的调用方式的前提下,为其添加新功能
    装饰器原则:不修改源代码,不修改调用方式,还要能够增加新功能

    装饰器基本形式

    #装饰器定义
    def deco(func):
        def wrapper(*args,kwargs):
            pass
            res=func()
            return res
        return wrapper
        
    #使用装饰器
    @deco
    def func1():
        pass
    

    保留原函数帮助文档

    使用wraps

    from functools import wraps
    def deco(func):
        @wraps(func)
        def wrapper(*args,**kwargs):
            pass
            res=func()
            return res
        return wrapper
    

    有参装饰器

    #装饰器定义
    def deco2(pattern):
        def deco(func):
            def wrapper(*args,kwargs):
                pass
                res=func()
                return res
            return wrapper
        return deco
        
    #使用装饰器
    @deco(pattern)
    def func1():
        pass
    
  • 相关阅读:
    java 运算符优先级(sum operator priority level)
    how to improve your programming ablity?
    window.returnValue = 00000000; window.close();
    list
    select card 双层
    double color ball
    Linq 左连接 内连接
    DDD 详细 介绍 摘自网络
    没有老板的公司,你适应吗?摘自网络
    Using Java Classes in your .NET Application 摘自网络
  • 原文地址:https://www.cnblogs.com/chenrenjian/p/7050290.html
Copyright © 2011-2022 走看看