zoukankan      html  css  js  c++  java
  • day5

    装饰器

    定义:

    装饰器:器为函数意思,本质上是函数,与函数没有多大的区别,同样是def定义的函数。主要用来装饰其他函数,就是给其他函数添加新的功能。

    规则:

    1.不能修改被装饰函数的源代码

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

    总结:

    装饰器对被 装饰的函数完全是透明的。

    实现装饰器的知识储备:

    1.函数即‘变量’

    2.高阶函数

      a.把一个函数的函数名当作实参传给宁外一个函数(不改变被装饰函数的源代码为其添加功能)

      b.返回值中包含函数名。(不改变原函数的调用方式的情况下为其添加功能)

    3.嵌套函数

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

    函数即‘变量’

      定义一个x=1,在内存中是:内存中开辟一个小房子,将1这个值放进去,而x是这个房子的门牌号,指向的是存1的内存地址,这个就是函数的引用。调用变量是,直接x就行。

      函数即“变量”,同样的,函数名=函数体,将函数体放入内存中,就是一堆的字符串,并没有什么功能,将函数名这个门牌号指向这个函数体的内存地址。只是函数调用的时候要在函数名后面加小括号---》函数名()

      匿名函数,是没有函数名=函数体这样的,如果没有变量接收它,那么它会立刻被内存回收机制回收

      python解释器自带内存回收机制的功能

        解释器主要就是看这个值的变量的引用是否为0,为0就回收,不为0,不回收。比如:x=1 y=x 那么存储1这个值的内存地址就有2个引用。

        del x 删除了一个门牌号,去掉了一个引用,隔一段时间会自动刷新

        你不人为的去删除门牌号,它是会一直存在,直到函数结束,释放。

      python解释器是先解释,后调用,也就是与变量一样,先定义后调用。比如:x=1 y=2 print(x,y)与 y=2 x=1 print(x,y)是一样的效果,都是先在内存中定义,已经存在。

    # def foo():
    #     print("in the foo")
    #     bar()#在内存中找bar指向的内存,没有,报错
    # foo()
    
    
    # def bar():
    #     print("in the bar")
    # def foo():
    #     print("in the foo")
    #     bar()
    # foo()
    
    
    # def foo():
    #     print("in the foo")
    #     bar()
    # def bar():
    #     print("in the bar")
    # foo()
    
    
    def foo():
        print("in the foo")
        bar()
    foo()#第一,函数由上向下执行,首先,是在内存中定义foo,然后调用foo,但是这个时候内存中还没有定义bar,所以会出错
    def bar():
        print("in the bar")
    

      

    高阶函数

    高阶函数

      a.把一个函数的函数名当作实参传给宁外一个函数(不改变被装饰函数的源代码为其添加功能)

      b.返回值中包含函数名。(不改变原函数的调用方式的情况下为其添加功能)

     1 import time
     2 def bar():
     3     time.sleep(3)
     4     print("in the bar")
     5 
     6 def test(func):
     7     start_time=time.time()
     8     func()
     9     stop_time=time.time()
    10     print("the run func time is %s"%(stop_time-start_time))
    11 
    12 test(bar)
    13 print(bar)
    import time
    def bar():
        time.sleep(3)
        print("in the bar")
    
    def test(func):
        print("in the test")
        return bar
    
    print(bar)
    bar=test(bar)
    print(bar)
    bar()
    

    嵌套函数

    定义:在一个函数里面用def去定义一个新的函数,就叫嵌套函数; 

    嵌套函数肯定默认是从里往外找;

    def test():
        print("in the test")
        def bar():
            print("in the bar")
        bar()
    test()
    def test2():
        pass
    def test1():
        print("in the test1")
        test2()
    test1()
    

      这个就是函数的调用而不是嵌套函数

     1 x=1
     2 def grandpa():
     3     x=1
     4     def dad():
     5         x=2
     6         def son():
     7             x=3
     8             print(x)
     9         son()
    10     dad()
    11 grandpa()

    函数永远都是从里面往外找

    记住,函数即变量,函数体里面的函数,也只在当前函数内生效,跟局部变量和全局变量的作用域是一样的。假设你函数定义了不调用,就与变量定义了不调用是一样的。

  • 相关阅读:
    Tomcat 配置 项目 到tomcat目录外面 和 域名绑定访问(api接口、前端网站、后台管理网站)
    弹窗插件zDialog使用教程
    shiro+spring相关配置
    jQuery分页插件(jquery.page.js)的使用
    ueditor1.4.3配置过程(包含单独上传文件以及图片的使用),ueditor1.4.3上传配置(转 http://www.bkjia.com/webzh/1001016.html)
    ueditor1_4_3_3编辑器修改文章
    jquery获取当前select下拉选的属性值
    js点击标签时获取当前标签属性值
    mysql给root开启远程访问权限,修改root密码
    redis持久化配置
  • 原文地址:https://www.cnblogs.com/xiaojuanzi666/p/8932279.html
Copyright © 2011-2022 走看看