# _*_ coding:utf-8 _*_
__author__ = 'brian'
__date__ = '2019/3/5 0005 23:09'

"""
函数
    1.定义和调用
    def 函数名(形参)  ----定义
        函数体
        return 返回值
    函数名()  ----调用
    站在形参角度上：位置参数 *args 默认参数 **kwargs
    站在实参角度上：按照位置传 按照关键字传 
    
    返回值：
        无返回值：不接受
        返回1个值：用一个变量接收
        返回多个值：返回的是元组，可以用一个变量或与该元组长度相等的变量个数接受
        
闭包：  ----内部函数中引用外部函数中的变量
    
装饰器：  ----一定是闭包函数
    作用：不改变原来函数的调用方式的情况下，在其前后添加新功能
    符合：开放封闭原则。易于扩展，不能修改
        ----开放：对扩展开放
        ----封闭：对修改封闭
    装饰器基本模型：
from functools import wraps
def wrapper(f):
    @wraps(func)  # 这个声明使得我们查看原函数的方法时能继续生效
    def inner(*args, **kwargs):
        # 此处添加函数被调用前代码
        ret = f()
        # 此处添加函数被调用后的代码
        return ret
    return inner

@wrapped    # 语法糖
def func():
    print(1)
func()
    
    带参数的装饰器：三重嵌套   ----在原装饰器函数的外层再次嵌套一层
    
    多个装饰器装饰一个函数：
  

        
"""