知识总结:
一、命名关键字参数(了解)
二、函数对象
三、函数的嵌套调用
四、函数的嵌套定义
五、名称空间
六、名称空间的查找顺序
七、作用域
一、命名关键字参数:
在函数定义阶段,写在*与**可变长参数之间的形参
在给命名关键字参数传值的时候,只能用关键字为其传值
在定义函数阶段,给你感觉好像z是默认值参数,放在m这个位置参数的前面,感觉有错
其实z、m都是命名关键字参数,不是默认值参数和位置参数
二、函数对象
函数对象是第一类对象,函数名指向的值可以当作参数传递
1.函数名可以被传递
2.函数名可以当作参数传递给其他函数
3.函数名可以被当做函数的返回值
4.函数名可以被当做容器类型的参数
三、函数的嵌套调用
1.在函数内部调用其他函数
2.可以将复杂的逻辑简单化
四、函数的嵌套定义
五、名称空间
名称空间是什么?
1.所谓名称空间就是放名字的地方
2.详细解释:存放的是变量名以及变量值随着的内存地址
3.要想访问一个变量的值,必须先去名称空间中拿到对应的名字 ,才能够访问变量的值
名称空间的分类:
1.内置名称空间:python解释器提前给你定义好的名字(已经存放到内置名称空间中了)
len
max
min
2.全局名称空间:文件级别的代码
x = 1
if 1 ==1 :
y = 2
print(y)
while True:
z = 3
x,y,z都会放到全局名称空间
if、 for、 while 无论嵌套多少层 它们内部所创建的名字都是全局名称空间的
3.局部名称空间:函数体内创建的名字都属于局部名称空间
生命周期:
内置名称空间:只要python解释器已启动立马创建 关闭python解释器的时候内置名称空间自动销毁
全局名称空间:只要你右键运行py文件会自动创建 py文件程序运行结束自动销毁
局部名称空间:函数被调用的时候自动创建 函数指向结束立即销毁(动态创建动态销毁)
六、名称空间的查找顺序
名字的查找 (******)
需要先确定你当前在哪(大前提)
1.站在全局: 全局 >>> 内置
2.站在局部: 局部 >>> 全局 >>> 内置
函数在定义阶段查找名字的顺序就已经固定了 不会因为函数的调用位置变化而改变(******)
七、作用域
两大类
全局作用域:
内置名称空间、全局名称空间
局部作用域:
局部名称空间
修改作用域:
修改的是不可变类型,不是创建对应的名称空间
关键字: global nonlocal
global 在局部修改全局的不可变数据类型, 如果想修改多个,逗号隔开,
nonlocal 局部修改局部, 如果想修改多个 逗号隔开