zoukankan      html  css  js  c++  java
  • day11 装饰器初识

    本节课主要内容

    1函数名的运用 第一类对象

    2闭包

    3装饰器初识

    一 函数名的运用:

    函数名是一个变量,但它是一个特殊的变量,与括号配合执行函数的变量

    1函数名的内存地址

    # def  func():
    #     print("呵呵")
    # print(func())#返回none 是因为没加返回值
    # print(func) #返回的是func这个函数的内存地址
    

    2函数名可以赋值给其他变量

    # def func():
    #     print("呵呵")
    # a=func #吧函数当成一个变量赋值给另一个变量
    # a()   #函数调用func()
    

    3 函数名可以当做容器量的元素

    # def func1():
    #     print("呵呵")
    # def func2():
    #     print("嘻嘻")
    # def func3():
    #     print("嘿嘿")
    # def func4():
    #     print("嗯嗯")
    # lst=[func1,func2,func3]  #吧每个函数的名字装在一个列表里
    # for i in lst:  #循环这个列表
    #     i()     #启用列表每个函数名
    

    4 函数名可以当做函数的参数

    # def func2(fn):
    #     print("我是func2")
    #     fn()  #执行传过来的fn
    #     print("我是func2")
    # func2(func)  #吧函数func当成参数传递给func2的参数fn
    

    5函数名可以作为函数的返回值

      

    def func1():
        print("这是函数1")
        def func2():
            print("这里是函数2")
        print("只是函数1")
        return func2  #执行函数3返回的是fun2
    fn=func1()    #fn=func1意思是  fun2=fun1
    fn()        #执行fun2
    

    二  闭包

    什么是闭包?闭包就是内层函数引用外层函数(不能是全局函数) 我们可以用_closure_来检测cell是闭包 none不是

    def func1():
        name="alex"
        def func2():
            print(name)
        func2()
        print(func2.__closure__)  #返回的是cell
    func1()
    

      如何在函数外边调用内部函数呢?

    def func1():
        name="alex"
        def inner():
            print(name)
        return inner
    fn=func1()  #访问外部函数获取到内部函数的函数地址
    fn()  #访问内部函数
    

       由它我们可以引出闭包的好处.  由于我们在外界可以访问内部函数. 那这个时候内部函 数访问的时间和时机就不⼀一定了了, 因为在外部, 我可以选择在任意的时间去访问内部函数. 这 个时候. 想⼀一想. 我们之前说过, 如果⼀一个函数执⾏行行完毕. 则这个函数中的变量量以及局部命名 空间中的内容都将会被销毁.  在闭包中. 如果变量量被销毁了了. 那内部函数将不能正常执⾏行行. 所 以. python规定. 如果你在内部函数中访问了了外层函数中的变量量. 那么这个变量量将不会消亡. 将会常驻在内存中. 也就是说. 使⽤用闭包, 可以保证外层函数中的变量量在内存中常驻.

    三 装饰器初识

      设计原则:开闭原则,又被称为开放封闭原则.你的代码对功能的扩展是开放的,你的程序对修改源代码是封闭的,这样的软件设计思路可以更好的维护和开发

    def fun(func2):
        def inner(*args,**kwargs):
            print("每次执行被装饰函数之前都得先经过这里")
            ret=func2(*args,**kwargs)
            print("每次执行完被装饰函数之后都得先经过这里")
            return  ret
        return inner
    @fun
    def fun1():
        print("执行中")
    

      

  • 相关阅读:
    bootstrap
    史上最全Html和CSS布局技巧
    三种实现左右固定,中间自适应的三栏布局方式
    网页布局常用样式属性
    去除inline-block间隙的几种方法
    HTML&CSS——使用DIV和CSS完成网站首页重构
    I want to be a Great Web Front-end Developer
    js常用函数汇总(不定期更新)
    关于git stash的应用总结
    vue 自定义指令
  • 原文地址:https://www.cnblogs.com/daien522556/p/9184568.html
Copyright © 2011-2022 走看看