#!/usr/bin/env python
# -*- coding:utf-8 -*-
# 开放封闭原则
# def outer(func):
# # func 原来的f1函数
# def inner1():
# print('start')
# print('start')
# print('start')
# r = func() # r = none
# print('end')
# return r
# return inner1
# # return lambda :123
#
#
# @outer
# def f1():
# print('f1')
# return '000'
#
# a = f1()
# print(a)
# 1、执行outer函数,并且将其下面的函数名,当成参数传递进去
# 2、将outer的返回值重新赋值给 F1 = outer的返回值
def outer(index):
def inner(*args, **kwargs):
print('123')
a = index(*args, **kwargs)
print("456")
return a
return inner
def outer1(index):
def inner(*args, **kwargs):
print('第二')
a = index(*args, **kwargs)
return a
return inner
#
# ####################
# a = index(1, 2)
#
# print(a)
@outer1 #谁在上面先执行谁
@outer
def aa(a1):
print(a1)
b = aa(11)
print(b)
# index()
# a = index()
# print(a)
# 只要函数应用装饰器,那么函数就被重新定义,重新定义为:装饰器的内层函数
# aaa
# 1、执行outer函数,将index座位参数传递
# 2、将outer的返回值,重新复制给index
# 一个函数上面可以应用多个装饰器