329 动态函数,作用域,嵌套函数,关键字


动态参数 *args **kwargs
*args 动态参数,万能参数
args接受的就是实参对应的 所有位置参数,并将其放在元组中。
形参对应顺序:位置参数,*args,默认参数
**kwargs 动态传参,他将所有的关键字参数(无意义的)放到一个字典中。
形参角度:

最终顺序:位置参数,*args,默认参数,**kwargs
 在函数的调用执行时,
*可迭代对象,代表打散(list,tuple,str,dict(键))将元素一一添加到args。
**字典,代表打散,将所有键值对放到一个kwargs字典里。
在函数定义时, *args,**kwargs代表的是聚合。
名称空间:
名称空间(命名空间),临时名称空间,内置名称空间。

全局名称空间,名称空间,命名空间,全局命名空间。
局部命名空间,临时名称空间,临时命名空间,局部名称空间,。
内置名称空间,所有的内置函数等存储的空间。
加载顺序:
内置名称空间 ---> 全局名称空间--->(函数执行时)局部名称空间。
取值顺序:
函数执行时:局部名称空间 -->全局名称空间 -->内置名称空间

当执行函数的时候,他会在内存中开辟一个临时名称空间,存放函数体内的所有变量与值的关系,
# 随着函数的执行完毕,临时空间自动关闭。
#input(),print(),len 内置函数


函数的嵌套
函数调用的时候执行。
代码从上至下依次执行, 调用函数:函数里面从上至下依次执行。

关键字
globals()   全局名称空间:所有变量  对可变数据类型(list,dict,set)可以直接引用不用通过global。
locals() 局部名称空间:所有变量
global
1,在局部空间内,声明一个全局变量 
2,在局部空间内改变一个全局变量
nonlocal
1,不能修改全局变量。
2,在局部作用域中,对父级作用域(或者更外层作用域非全局作用域)的变量进行引用和修改,
并且引用的哪层,从那层及以下此变量全部发生改变。
原文地址:https://www.cnblogs.com/Mr-Murray/p/8672722.html