day 12 名称空间和闭包函数

函数嵌套

  按照函数的两个阶段分为:

    嵌套调用:在一个函数内部调用另一个函数

    嵌套定义:在一个函数内部定义另一个函数

名称空间(namespace):存储名字的内存区域

名称空间的分类:

  内置名称空间:存的是解释器自带的名称

  全局名称空间:只要是顶着最左边写的,没有任何缩进,就在全局名称空间中

        注意在if中如果if是顶着最左边的没有缩进,那么if里面的名字也在全局名称空间中,while,for with同样如此

  局部名称空间:存的是函数内定义的名字

  名称空间的加载顺序

    内置  -->  全局  -->   局部

    名字的查找顺序

    局部  -->  全局  -->  内置

作用域

  指的是名字生效的有效空间

存储名字的有三个地方

  内置名称空间

  全局名称空间

  局部名称空间

全局作用域:

  内置空间和全局空间都是同一个范围,都是全局作用域

局部作用域:

  局部名称空间归为局部作用域

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

global

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

  注:必须在使用这个名字之前声明(global)

nonlocal

  当需要在内层函数中修改外层函数中的名字的时候就使用nonlocal关键字

  会一层一层往外层查找,直到找到了为止,不会寻找到全局作用中,最后一层函数中没有找到就会报错

函数对象

函数是第一对象

  1.能够被调用

  2.可以当做容器类型的元素

  3.可以当做函数的参数

  4.可以当做函数的返回值

函数名除了可以调用之外,其他的都与一个变量名没哟本质区别

闭包函数:

  闭包函数:就是在一个函数定义另一个函数

  闭包函数也是一种函数

  特点是:

  1.该函数是定义在另一个函数中

  2.该函数包含了对外层函数中名字的引用,满足以上两条就是闭包函数

 注意:名字所在的作用域,在函数定义阶段就已经固定了

猜你喜欢

转载自www.cnblogs.com/MrPotato-Head/p/10267690.html