函数介绍以及函数的嵌套

Posted on 2019-01-14 15:23  杜卡迪S11  阅读(650)  评论(0编辑  收藏  举报

函数嵌套

  嵌套:一个物体包含另一个物体

  函数嵌套:一个函数包含另一个函数

函数嵌套分类

  嵌套调用:在函数的执行过程中,去调用另一个函数,优点:可以简化外层大函数的代码,使结果更加清晰,可以将一个大的复杂的功能拆分成多个简单的小功能

  嵌套定义:在函数的函数体中定义了另一个函数

  注意:内部定义的函数只能在内部使用,外界无法调用

       唯一的使用场景就是闭包函数,其他函数不要去写

名称空间:

    namespace:存储名字的内存区域

    特点:在运行过程中一直有效

    生命周期:随着解释器的启动而生效,解释器运行结束而失效

全局名称空间:

    定义:只要是靠最左边写的,没有任何缩进的代码,就在全局名称空间中

    特点:在程序运行中一直有效

    生命周期:随着py文件的执行而生效,随着py文件的执行结束而失效

    注意:在if语句中,如果if是顶着最左边的没有缩进的,那么if里面的代码也属于全局

    同样的,while、for、with也是如此

局部名称空间:

    定义:存的是函数内定义的名字

    特点:仅在函数调用时临时有效

    生命周期:随着函数的调用结束而失效

  名字的查找顺序:

      先局部,后全局,再内置

  名称空间的加载顺序:

      先内置,后全局,再内置

作用域:

  作用区域,作用范围,有效范围(换句话就是名字的有效范围)

存储名称的三个地方:

  内置名称空间

  全局名称空间

  局部名称空间

由于内置名称空间的名字与全局名称空间的名字,可以在任意位置来访问,所以它们两个可以划到同一个范围,称之为全局范围即全局作用域

空间名称:空间的名字只能在当前的函数中访问,所以单独的划分到一个范围中,这个范围称之为局部作用范围及局部作用域

global(全局)与nonlocal(不使用本地)关键字

  global当需要在函数内部修改全局中名字的值时需要使用global

  注意:必须在使用这个名字之前声明global(全局)和nonlocal(不使用本地)

  当需要在内存函数中修改外层函数中的名字,就需要使用nonlocal,会一层一层的往外找,直到找到为止,但是只能找函数中的,不能找全局的名字

函数是第一类对象:

  1、能够被调用

  2、可以当这容器类型的元素

  3、可以当做函数的参数

  4、可以当作函数的返回值

 函数名除了可以调用之外,与一个变量名没有本质区别,变量名能怎么用,函数就能怎么用

闭包函数:

    定义:一个和函数将另一个函数关闭在内部,闭包函数也是一种函数

    特点:1、该函数是定义在另一个函数中的

       2、该函数包含了对外层函数中名字的引用,无论在任何位置使用这个函数,其都包含了外部名字的引用

       满足以上两点,就称为闭包函数

    需要注意的是:名字所在的作用域,在函数定义阶段就已经固定了,与调用位置无关

现阶段,可以将闭包函数理解为另一种为函数体传值的方式