zoukankan      html  css  js  c++  java
  • 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 # 讲解元旦作业 扩展装饰器
  • 相关阅读:
    变量的创建和初始化
    HDU 1114 Piggy-Bank (dp)
    HDU 1421 搬寝室 (dp)
    HDU 2059 龟兔赛跑 (dp)
    HDU 2571 命运 (dp)
    HDU 1574 RP问题 (dp)
    HDU 2577 How to Type (字符串处理)
    HDU 1422 重温世界杯 (dp)
    HDU 2191 珍惜现在,感恩生活 (dp)
    HH实习 acm算法部 1689
  • 原文地址:https://www.cnblogs.com/gcs888/p/10779725.html
Copyright © 2011-2022 走看看