python全栈脱产第10天------函数、名称空间、作用域、闭包函数
一、函数
定义:函数是第一类对象,指的是函数名指向的值(函数)可以被当做数据去使用
用法:def+函数名
1.可以被引用
2.可以当做参数传给另一个函数
3.可以当做一个函数的返回值
4.可以当做容器类型的值
函数的嵌套:1.函数的嵌套调用:在调用一个函数的过程中,其内部代码有调用了其他函数
2.函数的嵌套定义:一个函数内部又定义了一个新的函数
二、名称空间
定义:就是用来存放名字与值内存地址绑定关系的地方(内存空间),查找值一定要通过名字,访问名字必须要去查找名称空间
名称空间的分类:1.内置名称空间:存放的是python解释器自带的名字
2.全局名称空间:存放的是文件级别的名字
3.局部名称空间:在函数定义的名字
生命周期:1.内置名称空间:在解释器启动时生效,解释器关闭失效
2.全局名称空间:在解释器解释执行python文件则生效,文件执行完毕后则失效
3.局部名称空间:只在调用函数时生效,临时产生该函数的局部名称空间,函数调用完毕则失效
加载顺序:内置>全局>局部
查找名字的顺序:基于当前位置查找
假设在局部查找:局部---->全局---->内置
假设在全局查找:全局---->内置
名字查找顺序在定义函数的阶段就已经固定了,即在检测语法时就已经确定名字的查找顺序,与函数的调用位置无关,无论在哪里调用函数,都必须去定义函 数的位置去确定名字的查找顺序
三、作用域
定义:域是指范围,作用域指的是作用的范围
1.全局作用域:包含内置名称空间与全局名称空间的名字 特点:全局有效,全局存活
2.局部作用域:包含的是局部名称空间中的名字 特点:局部有效,临时存活
global方法:在局部声明一个名字来自于全局作用域的,可以用来在局部修改全局的不可变类型
用法:x=0
def foo():
global x
x=2
nonlocal方法:声明一个名字是来自于当前层外一层作用域的,可以用来在局部修改外层函数的不可变类型
用法:def foo():
x=2
def index():
nonlocal x
x=222
四、闭包函数
定义:闭指的是闭包函数是定义在一个函数内部的函数
包指的是内部函数包含对外层函数作用域名字的引用
闭包函数就是指定义在一个函数内部的函数对外层函数作用域名字引用的函数
需要结合函数对象的概念将闭包函数返回到全局作用域去使用,从而打破函数的层级限制
用途:闭包函数提供了一种为函数传值的解决方案
用法:为函数传值:1.参数
2.闭包