• 函数的嵌套/名称空间/作用域/函数对象/闭包函数


    1.函数的嵌套调用,在函数内又调用了其他函数

    这两个不同的函数。

    2.函数的嵌套定义,在函数内又定义了其他函数

    名称空间:存放名字与值绑定关系的地方

    名称空间分为三类

    但凡带名的,全部丢到名称空间里

    1.内置名称空间:存放python解释器自带的名字,在解释器启动时就生效,解释器关闭则失效。

    (print,len,strip)

    2.全局名称空间:文件级别名字,在执行文件的时候生效,在文件结束或者文件执行期间被删除则失效。(例如fun()是全局名称空间,不带()是内存地址)

    def func():

      name='egon'

    del fun

    print('==========================================')

    print('==========================================')

    print('==========================================')

    print('==========================================')

    print('==========================================')

    print('==========================================')

    3.局部名称空间:存放函数内定义的名字(函数的参数以及函数内的名字都存放与局部局部名称的空间)

    在函数调用时临时生效,函数结束则生效。

    加载顺序:内置名称空间-------------->全局名称空间---------------->局部名称空间

    查找名字:局部名称空间-------------->全局名称空间---------------->内置名称空间

    作用域

    全局作用域:包含的是内置名称空间与全局名称空间的名字,(用之前需要定义)

    特点

    1.在任何位置都能访问的到

    2.该范围内的名字会伴随程序整个生命周期

    局部作用域:包含的是局部名称空间的名字

    特点

    1.只能在函数内使用

    2.调用函数时生效,调用失败则失效

    函数对象

    1、可以被引用

    2、可以当作参数传递

    3、返回值可以是函数

    4、可以当作容器类型的元素,可以把函数存放到一个列表里面

    闭包函数

    1、定义在函数内部的函数,在函数定义阶段就规定死了,与调用的位置无关。

    2、并且该函数包含对外部函数作用域中名字的引用,该函数就称为闭包函数。

    内部函数引用了外部函数的变量,这就叫做闭包函数。(闭包函数与嵌套函数会混淆)

    =============================================================================================

    函数嵌套

      函数的嵌套调用

        def foo():

           bar()

       函数的嵌套定义

        def f1():

          def f2():#f2=函数的内存地址

            pass

          print(f2)

      名称空间与作用域

        名称空间:存放名字与值绑定关系的地方,x=[1,2,2,2,]

          内置名称空间

            ①存放python解释器自带的名字

            ②解释器启动则生效,解释器关闭则失效

          全局名称空间

            :存放文件级别的名字

          局部名称空间

            :存放函数内定义的名字

             函数调用时生效,函数调用结束则失效

          加载顺序:

           加载顺序------->内置-------->全局--------->局部

           名字的查找顺序:局部->全局->局部

            

                # x=0
                def f1():
                    # x=1
                    def f2():
                        # x=2
                        def f3():
                            # x=3
                            def f4():
                                # x=4
                                print(x)
                    f2()
    
                f1()
    

      作用域关系是在函数定义阶段就规定死了,与调用位置无关,

      也就是说,无论函数在哪调用,都必须回到当初定义函数时的位置找作用域关系

    =============================================================================================================

      作用域:

    全局作用域:包含的是内置名称空间与全局名称空间的名字,

    特点:

    1.在任何位置都能访问的到

    2.该范围内的名字会伴随程序整个生命周期

    局部作用域:包含的是局部名称空间的名字

    特点:

    1.只能在函数内使用

    2.调用函数时生效,调用结束失效

    ==============================================================================================================            

      函数对象

        1.可以被引用

        2.可以当中参数传给另外一个函数

        3.可以当中函数的返回值

        4.可以当中容器类型的元素

      闭包函数

        定义在函数内部的函数,并且该函数包含对外部函数的作用域(强调:对全局作用域名字的引用不算闭包),该函数称为闭包函数

    def outter():
            x=1
            def=inner():
                    print(x)
            return inner
                     
    

      闭包函数永远以自己包裹的状态为准

  • 相关阅读:
    Struts学习注册与登录
    AJAX练习
    多线程下WinForm开发应该注意哪些问题?
    .NET下跨线程访问Control。
    配置IIS使用ASP.NET 2.0
    让你的Firefox使用Google.CN进行搜索
    Live Messenger 邀请,再次放送
    也谈博客园的商业化
    【点滴】向Sql Express数据库文件中注册Asp.NET 2.0用户管理模块
    Re: EnterLib ObjectBuild vs Castle WindsorContainer, part 1
  • 原文地址:https://www.cnblogs.com/wangmiaolu/p/8665008.html
Copyright © 2020-2023  润新知