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
    
  • 相关阅读:
    洛谷 P1474 货币系统 Money Systems 题解
    洛谷 P5146 最大差值 题解
    洛谷 P1880 [NOI1995]石子合并 题解
    洛谷 P1063 能量项链 题解
    洛谷 P3385 【模板】负环 题解
    洛谷 P1522 牛的旅行 Cow Tours 题解
    洛谷 P2212 [USACO14MAR]浇地Watering the Fields 题解
    浅谈 C 语言中模块化设计的范式
    内联函数(Inline Functions)
    C++中全局变量的声明和定义
  • 原文地址:https://www.cnblogs.com/chenrenjian/p/7050290.html
Copyright © 2011-2022 走看看