day 11 装饰器

1.day 10 内容复习

# 之前做得的题 以后再遇到能保证会
# 下周二考 :所有的知识
# 面试题:认真对待
#
# 三元运算符
# 接收结果的变量 = 条件为真的结果 if 条件 else 条件为假的结果
# 接收结果的变量 = “真结果” if 条件 else “假结果”
#
# 命名空间 和 作用域
# 三种:内置 全局 局部
# 作用域:全局 局部 globals() locals()
#         global  在局部声明一个全局变量
#         nonlocal 在局部声明最近的上一层局部中的变量
# 作用域链 : 小范围用变量的时候,先从自己的名字空间找,
#             找不到就一层一层向外层找,知道找到为止。
#             找不到就报错。
# 函数的嵌套调用和嵌套定义
#     定义在函数内部的函数不能被外界直接调用
#     内部函数可以使用外部的变量
# 函数名的本质
#     就是一串内存地址
#     可以赋值、可以作为容器类型的元素、函数的参数和返回值 —— 第一类对象

# 闭包 : 内部函数使用外部函数的变量
def outer():
    a = 1
    def inner():
        print(a)
    return inner

i = outer()
i()

2.作业讲解

 1 # 2、写函数,接收n个数字,求这些参数数字的和。
 2 def sum_func(*args):
 3     total = 0
 4     for i in args:
 5         total += i
 6     return total
 7 print(sum_func(1,2,3,8,23,6))
 8 
 9 # 3、读代码,回答:代码中,打印出来的值a,b,c分别是什么?为什么?
10 #     a=10
11 #     b=20
12 #     def test5(a,b):
13 #          print(a,b)
14 #     c = test5(b,a)
15 #     print(c)
16 
17 
18 
19 # 4、读代码,回答:代码中,打印出来的值a,b,c分别是什么?为什么?
20 #     a=10
21 #     b=20
22 #     def test5(a,b):
23 #         a=3
24 #         b=5
25 #          print(a,b)
26 #     c = test5(b,a)
27 #     print(c)

3.装饰器

  1 # 装饰器形成的过程 : 最简单的装饰器 有返回值的 有一个参数 万能参数
  2 # 装饰器的作用
  3 # 原则 :开放封闭原则
  4 # 语法糖 :@
  5 # 装饰器的固定模式
  6 
  7 #不懂技术
  8 
  9 
 10 import time
 11 # print(time.time()) # 获取当前时间
 12 # time.sleep(10)  #让程序在执行到这个位置的时候停一会儿
 13 
 14 
 15 # def timmer(f):    #装饰器函数
 16 #     def inner():
 17 #         start = time.time()
 18 #         ret = f()       #被装饰的函数
 19 #         end = time.time()
 20 #         print(end - start)
 21 #         return ret
 22 #     return inner
 23 #
 24 # @timmer         #语法糖 @装饰器函数名
 25 # def func():     #被装饰的函数
 26 #     time.sleep(0.01)
 27 #     print('老板好同事好大家好')
 28 #     return '新年好'
 29 # # func = timmer(func)
 30 # ret = func()   #inner()
 31 # print(ret)
 32 # 装饰器的作用 —— 不想修改函数的调用方式 但是还想在原来的函数前后添加功能
 33 # timmer就是一个装饰器函数,只是对一个函数 有一些装饰作用
 34 
 35 # 原则: 开放封闭原则
 36 #   开放 : 对扩展是开放的
 37 #   封闭 : 对修改是封闭的
 38 
 39 # 封版
 40 
 41 # def outer():
 42 #     def inner():
 43 #         return 'inner'
 44 #     inner()
 45 #
 46 # outer()
 47 
 48 #装饰带参数函数的装饰器
 49 # def timmer(f):    #装饰器函数
 50 #     def inner(*args,**kwargs):
 51 #         #(1,2) /(1)
 52 #         start = time.time()
 53 #         ret = f(*args,**kwargs)  #f(1,2)       #被装饰的函数
 54 #         end = time.time()
 55 #         print(end - start)
 56 #         return ret
 57 #     return inner
 58 #
 59 # @timmer         #语法糖 @装饰器函数名
 60 # def func(a,b):     #被装饰的函数
 61 #     time.sleep(0.01)
 62 #     print('老板好同事好大家好',a,b)
 63 #     return '新年好'
 64 #
 65 # @timmer         #语法糖 @装饰器函数名
 66 # def func1(a):     #被装饰的函数
 67 #     time.sleep(0.01)
 68 #     print('老板好同事好大家好',a)
 69 #     return '新年好'
 70 # # func = timmer(func)
 71 # ret = func(1,2)   #inner()
 72 # ret = func(1,b = 2)   #inner()
 73 # print(ret)
 74 
 75 
 76 #装饰器的固定格式
 77 # def wrapper(f):    #装饰器函数,f是被装饰的函数
 78 #     def inner(*args,**kwargs):
 79 #         '''在被装饰函数之前要做的事'''
 80 #         ret = f(*args,**kwargs)    #被装饰的函数
 81 #         '''在被装饰函数之后要做的事'''
 82 #         return ret
 83 #     return inner
 84 #
 85 # @wrapper         #语法糖 @装饰器函数名
 86 # def func(a,b):     #被装饰的函数
 87 #     time.sleep(0.01)
 88 #     print('老板好同事好大家好',a,b)
 89 #     return '新年好'
 90 #第一步
 91 # def wrapper():
 92 #     def inner():
 93 #         pass
 94 #     return inner
 95 #第二部填充
 96 def wrapper(func):   #qqxing
 97     def inner(*args,**kwargs):
 98         ret = func(*args,**kwargs)   #被装饰的函数
 99         return ret
100     return inner
101 
102 @wrapper        #qqxing = wrapper(qqxing)
103 def qqxing():
104     print(123)
105 
106 ret = qqxing()   #inner
107 
108 #
109 # 讲解元旦作业 扩展装饰器

猜你喜欢

转载自www.cnblogs.com/gcs888/p/10779725.html