zoukankan      html  css  js  c++  java
  • 函数的嵌套/名称空间/作用域/函数对象/闭包函数

    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
                     
    

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

  • 相关阅读:
    Atitit 经济学常见的流派 古典主义与凯恩斯主义
    Atitit 学习方法 体系化学习方法 Excel 科目,分类,专业 三级分类。。 知识点。。 课程就是每一个知识点的详细化。。 比如经济学 类别 专业 xx概论知识点 3、金
    atiitt it学科体系化 体系树与知识点概念大总结.xlsx
    Atitit 减少财政支出普通人如何蹭政府补贴措施 attilax大总结.docx
    Atitit 信用管理概论 attilax学习心得
    Atitit.月度计划日程表 每月流程表v5
    Atitit 企业6大职能 attilax总结
    Atitit 常见每日流程日程日常工作.docx v8 ver ampm imp 签到 am y 天气情况检查 am y 晨会,每天或者隔天 am 每日计划(项目计划,日计划等。 am
    Atitit 财政赤字解决方案
    Atitit 建设自己的财政体系 attilax总结 1.1. 收入理论 2 1.2. 收入分类 2 1.3. 2 1.4. 非货币收入 2 1.5. 2 1.6. 降低期望 2 1.7.
  • 原文地址:https://www.cnblogs.com/wangmiaolu/p/8665008.html
Copyright © 2011-2022 走看看