函数3

一、闭包函数

  1. 闭包:内部函数对外部函数作用域而非全局作用域的引用

  2. 两种为函数传参的方式

    • 使用参数

def func(x):
    print(x)
        
func(1)

 

    • 包给函数
def outter(x):
    x = 1
    def inner(x):
        print(x)
    return inner
            
f = outter(1)
f()    

 

二、装饰器

  1. 开放封闭原则

    • 对扩展开放

    • 对修改封闭

  2. 装饰器的特点:

    • 装饰器本身是可以任意调用的对象

    • 被装饰对象也可以是任意可调用的对象

  3. 装饰器的两大原则:

    • 不修改被装饰对象的源代码

    • 不修改被装饰对象的调用方式

  4. 装饰器语法糖

    在被装饰函数正上方,并且是单独一行写上@装饰器名

  1. 两层装饰器模板

def deco(funco):
    def wrapper(*args, **kwargs):
        res = func(*args, **args)
        return res
    return wrapper
    
@deco
def index():
    pass    
 from functools import wraps
def deco(func):
    @wraps(func)
    def wrapper(*args, **kwargs):
        res = func(*args, **kwargs)
        return res
    return wrapper
        
@deco
def index():
    pass
        
print(index.__doc__)
print(index.__name__)        

 

  1. 带参数的装饰器

def outer(flag):
    def innre(func):
        def func(*args, **kwargs):
            if flag:
                print('执行函数前要做的')
            res = func(*args, **args)
            if flag:
                print('执行函数之后要做的')
            return res
        return func
    return inner

@outer(False)
def index():
    pass
    
index()
原文地址:https://www.cnblogs.com/binyuanxiang/p/11574670.html