• 装饰器知识


    装饰器:

    定义:本质上还是函数(功能:装饰其他的函数)也就是说:为其他函数添加附加功能

    原则:1、不能修改被装饰函数的源代码

    2、不能修改被装饰函数的调用方式

    总结:也就是说被修改的函数感知不到装饰器的存在,因为没有动函数的运行

    实现装饰器知识储备:

    1、函数即“变量”

    2、高阶函数

    3、嵌套函数

    高阶函数 + 嵌套函数==》装饰器

    1、函数即变量

    通过del只是删除掉了门牌号,因为每过一段时就会刷新一次,看那些变量没有被利用就会回收内存。比如;x=1一直被利用就永远不会被清空,除非用del来进行清理变量名,当一段时间刷新时,发现没有门牌号 1没有被引用才会清理掉

    Python是通过查找变量名字,如果找不到之后,才会将其中的1删掉  这就是python中的内存回收机制(门牌号没有的情况下会清除掉内容)

    其中的lambda x:x*3是可以直接被回收的,可以通过calc = lambda x:x*3 定义一个门牌号

    2、高阶函数

    a:把一个函数当做实参传递给另外一个函数(在不修改被装饰函数源代码的情况下为其添加功能)

    b:  返回值中包含函数名(不修改函数的调用方式)

      1 装饰器:
      2 
      3 定义:本质上还是函数(功能:装饰其他的函数)也就是说:为其他函数添加附加功能
      4 
      5 原则:1、不能修改被装饰函数的源代码
      6 
      7 2、不能修改被装饰函数的调用方式
      8 
      9 总结:也就是说被修改的函数感知不到装饰器的存在,因为没有动函数的运行
     10 
     11 实现装饰器知识储备:
     12 
     13 1、函数即“变量”
     14 
     15 2、高阶函数
     16 
     17 3、嵌套函数
     18 
     19 高阶函数 + 嵌套函数==》装饰器
     20 
     21 1、函数即变量
     22 
     23 
     24 
     25 
     26 通过del只是删除掉了门牌号,因为每过一段时就会刷新一次,看那些变量没有被利用就会回收内存。比如;x=1一直被利用就永远不会被清空,除非用del来进行清理变量名,当一段时间刷新时,发现没有门牌号 1没有被引用才会清理掉
     27 
     28 
     29 Python是通过查找变量名字,如果找不到之后,才会将其中的1删掉  这就是python中的内存回收机制(门牌号没有的情况下会清除掉内容)
     30 
     31 
     32 其中的lambda x:x*3是可以直接被回收的,可以通过calc = lambda x:x*3 定义一个门牌号
     33 
     34 
     35 2、高阶函数
     36 
     37 
     38 a:把一个函数当做实参传递给另外一个函数(在不修改被装饰函数源代码的情况下为其添加功能)
     39 
     40 
     41 b:  返回值中包含函数名(不修改函数的调用方式)
     42 
     43 
     44 # 匿名函数
     45 # calc = lambda x:x*3
     46 # print(calc) #输出为   <function <lambda> at 0x0127C660> 内存地址
     47 # #函数即变量
     48 # 方法1:
     49 # def bar():
     50 #     print('in the bar')
     51 # def foo():
     52 #     print('in the foo')
     53 #     bar()
     54 # foo()
     55 # 方法2:
     56 # def foo():
     57 #     print('in the foo')
     58 #     bar()
     59 # def bar():
     60 #     print('in the bar')
     61 # foo()
     62 #高阶函数
     63 # def bar():
     64 #     print("in the bar")
     65 # def test1(func):
     66 #     print(func)
     67 #     func()
     68 # func =bar   #函数即变量 将函数bar当做一个变量赋给函数func
     69 # test1(bar)
     70 
     71 # import time
     72 # def bar ():#被修饰的函数
     73 #      time.sleep(3)
     74 #      print("in the bar")
     75 # def foo(func):#
     76 #     first_time =time.time()
     77 #     func()#运行被修饰的函数
     78 #     stop_time=time.time()
     79 #     print("run the func is %s" %(stop_time-first_time))
     80 # foo(bar)
     81 
     82 
     83 import time
     84 def bar():
     85     time.sleep(3)
     86     print('in the bar')
     87 def foo(func):
     88     first_time = time.time()
     89     func()#运行被修饰的函数
     90     stop_time=time.time()
     91     print("run the func is %s" %(stop_time-first_time))
     92     return func
     93 print(foo)
     94 bar =foo(bar)#python 解释器中有专门的符号来处理 “=” 并且功能相同
     95 bar()#相当于不修改函数的调用方式
     96 #foo(bar)
     97 
     98 # import time
     99 # def bar():
    100 #     time.sleep(3)
    101 #     print('in the bar')
    102 # def test2(func):
    103 #     print(func)
    104 #     return func
    105 # bar =test2(bar)
    106 # bar()
    107 
    108 
    109 
    110 
    111 
    112 
    113 
    114  
    View Code

    3、嵌套函数

    1 在函数内部以def进行开始的函数
    2 Eg:  def test1():
    3     print('in the test1')
    4     def bar():  #函数的嵌套
    5         print('in the bar')
    6     bar()#函数的调用
    7 test1() 

    局部作用域和全局作用域的访问顺序

     1 x =0
     2 def  A():
     3     x =1
     4     def B():
     5         x =2
     6         def C():
     7             x =3
     8             print(x)
     9         C()
    10     B()
    11 A()
    View Code
  • 相关阅读:
    【TFLSnoi李志帅】第⑥篇文章---排序
    【TFLSnoi李志帅】第⑤篇文章--递推算法经典例题
    【TFLSnoi李志帅】第四篇文章---高精度加法
    【TFLSnoi李志帅】第三篇文章
    【TFLSnoi李志帅】第三篇文章---问题记录
    【TFLSnoi李志帅】第一篇文章
    为什么成功引入jquery后,效果无法生效
    到底classpath指向哪里
    05-配置web.xml
    04-配置事务管理
  • 原文地址:https://www.cnblogs.com/wises/p/8360972.html
Copyright © 2020-2023  润新知