函数进阶
一、函数参数--动态传参
动态参数必须在位置参数的后面
1、动态接收位置参数*args
接受的数据类型为元组( , )
2、动态接受关键字参数**kwargs
动态传参顺序
位置参数 > 动态参数* > 默认值参数>**关键字动态传参
*,**
形参: 聚合(接受元组合)
实参:打散
二、命名空间
1、定义
我们给存放名字和值的关系的空间起名为命名空间
2、分类
1、内置命名空间:存在python解释器中,自带的装在内置函数名的空间
2、全局命名空间:我们直接在py文件中,创建的变量名和函数名都属于全局命名空间
3、局部名空间:在函数内部申明的变量或者函数内部的函数名都属于局部命名空间
3、加载顺序
1、加载顺序:内置命名空间->全局命名空间->局部名空间
2、取值顺序:局部命名空间->全局命名空间-> 内置命名空间
4、作用域
1、全局作用域:全局命名空间+内置命名空间
globals( )查看全局作用域中的内容
2、局部作用域:局部命名空间
locals( )查看打的作用域中的内容,既可以查看全局,也可以查看局部作用域
三、函数的嵌套
定义:就是函数内部中定义了其他的函数
四、关键字global和nonlocal
global 变量名
1、如果全局变量中存在该变量,则将该变量引入局部,可以进行赋值操作
2、如果不存在,则在局部变量中直接创建该变量,并升华为全局变量
nonlocal 变量名(仅在局部中讯在变量)
在局部命名空间中,先往上一层寻找变量,找到就引入,没找到就继续往上上层寻找...最后没找到就报错