zoukankan      html  css  js  c++  java
  • 函数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()
  • 相关阅读:
    洛谷 1341 无序字母对
    POJ 2774 后缀数组 || 二分+哈希
    HDU 1251 统计难题
    【解题报告】AtCoder ABC115 (附英文题目)
    【模板】后缀数组
    洛谷 3567/BZOJ 3524 Couriers
    Beta 冲刺 (1/7)
    团队项目评测
    beta冲刺前准备
    Alpha冲刺——事后诸葛亮
  • 原文地址:https://www.cnblogs.com/binyuanxiang/p/11574670.html
Copyright © 2011-2022 走看看