• 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 # 讲解元旦作业 扩展装饰器
  • 相关阅读:
    Qt中widget重新setParent需要注意的问题
    在有状态机下,写自动测试需要注意的问题
    C#获取当前路径的7种方法
    VS快捷键大全
    [WPF]设置背景色
    [WPF]建立自适应窗口大小布局的WinForm窗口
    [WPF]Slider控件常用方法
    [C#.NET]
    VB中的API详解
    VB6.0和VB.Net的函数等对照表
  • 原文地址:https://www.cnblogs.com/gcs888/p/10779725.html
Copyright © 2020-2023  润新知