"""
装饰器
"""
"""
由闭包衍生而来:函数间嵌套, 内部函数用到了外部函数的数据(变量,东西)
作用:
装饰器就是可以在不修改原函数内部代码的情况下,对其增加功能(增加代码).

1,函数内部去添加代码,,增加功能,尽量不要去修改原函数内部的代码,,10行 1000行
装饰器就可以避免这两个缺点,,

"""

"""
要你对每个函数增加一个功能,,中华人民共和国.....
利用装饰器,,
"""

# 1 定义一个闭包:两个函数间的嵌套,  内部函数要使用到外部函数的数据,变量(字符串,函数,整型,列表)
# 见名知意, 避免开关键字
# def a(c):  # 形参  # 外部函数  a(函数) 实参
#     def b(): # 内部函数
#         print('中华人民共和国的:',end='')  # end =''默认不换行
#         c()  # c 函数调用 →→→  print('湖南省')
#     return b  # 函数名 代表着引用 指向了b函数 内部的代码空间
# #  a(函数) >>> b  # 实参 1,去函数内部执行里面的代码,, 2 代码执行完毕之后,a()他本身就代表着返回值
#
# # 要对其增加功能的函数,,我们就称之为要被装饰的函数,, 对其增加功能的操作就称之为装饰
# @a  # 装饰  @a >>>  demo1 = a(demo1) >>>>>    demo1 =   b
# def demo1():
#     print('湖南省')
# @a  # demo2 = a(demo2)
# def demo2():
#     print('湖北省')
# @a  # demo3 = a(demo3)
# def demo3():
#     print('台湾省')
#
# demo1()  # demo1 =  b 都指向了同一片内存空间  demo1() b()
# # 1,中华人民共和国的  + 2 湖南省  >>> 中华人民共和国的:湖南省
# demo2()  # demo2 = b
# demo3()



"""
画图分析装饰器
"""

# def a(c):  # 形参  # 外部函数  a(函数) 实参
#     def b(): # 内部函数
#         print('中华人民共和国的:',end='')  # end =''默认不换行
#         c()  # c 函数调用 →→→  print('湖南省')
#     return b  # 函数名 代表着引用 指向了b函数 内部的代码空间
# # demo1 = a(demo1) >>>>>    demo1 =   b
# @a  # 装饰  @a >>>
# def demo1():
#     print('湖南省')
# @a  # demo2 = a(demo2)
# def demo2():
#     print('湖北省')
# @a  # demo3 = a(demo3)
# def demo3():
#     print('台湾省')
#
# demo1()
# demo2()
# demo3()



"""
再议装饰器
"""
def a(c):  # 形参  # 外部函数  a(函数) 实参
    def b(): # 内部函数
        print('中华人民共和国的:',end='')  # end =''默认不换行
        c()  # c 函数调用 →→→  print('湖南省')
    return b  # 函数名 代表着引用 指向了b函数 内部的代码空间
# demo1 = a(demo1)
@a  # 语法糖 装饰  @a >>># demo1 = a(demo1)
def demo1():
    print('湖南省')
@a  # demo2 = a(demo2)
def demo2():
    print('湖北省')
@a  # demo3 = a(demo3)
def demo3():
    print('台湾省')

# demo1 = a(demo1)  >>> @a
demo1()
"""
0,demo1 = a(demo1)  # demo1 >>>print(湖南省) 是 实参 demo1 = c c() >>>print('湖南省')
1,a函数的调用,a(demo1)代表他的返回值本身b,, >>> demo1 = b  指向了同一片内存空间,共用一份代码
2,demo1() 相当于b() 
        print('中华人民共和国的:',end='')
        c()  >>>print('湖南省')
中华人民共和国的:湖南省
"""






# demo2 = a(demo2)
# demo2()
# demo3 = a(demo3)
# demo3()










