一, 函数参数--动态传参 (形参的第三种)
动态参数分为两种:
1.动态接收位置参数 *args
位置参数 按照位置进行传参 动态参数必须在位置参数后面 如果放在位置参数后面会报错,因为前面传递进去的参数都被*args参数接收了,后面的位置参数永远接收不到参数
如果加上默认值参数则 三个参数的顺序为 : 位置参数 动态参数 默认值参数 这样位置参数能接收到参数,动态参数也能接收到,默认值参数如果不给 则默认值永远生效.
2.动态接收关键字参数
在Python中用**来接收动态关键字参数 接收到的是一个字典
语句 def func(**kwargs):
print(kwargs)
func(**{key:value},**{key:value})
顺序的问题 在函数的调用时候如果先给出关键字参数,则整个参数列表会报错 因为这样会导致参数混乱赋值 所以位置参数必须在关键字参数前面,动态接收关键字也要在后面
最终顺序为: 位置参数>*args>默认值参数>**kwargs
在形参上用* ** 表示聚合 实参位置表示打散
二 . 命名空间
给存放名字和值关系的空间叫一个名字 即命名空间 变量在存储的时候就是存储在这片空间中的
命名空间的分类:
1.全局命名空间-->直接在py文件中,函数外生命的函数都属于全局命名空间
2.局部命名空间-->在函数中声明的变量会放在局部命名空间
3.内置命名空间-->存放Python解释器为我们提供的名字,list,str,int这些都是内置命名空
加载顺序: 3 1 2(函数被执行的时候)
取值顺序: 2 1 3
作用域: 作用域就是作用范围,按照生效范围来看分为 全局作用域和局部作用域
1.全局作用域 : 全局命名空间 + 内置命名空间
2.局部作用域: 局部命名空间
可以通过globals()函数来查看全局作用域中的内容,也可以通过locals()来查看局部作用域中的变量和函数信息
三 函数的嵌套
只要遇见了()就是函数的调用,没有()就不是函数的调用
函数的执行顺序
四 关键字global 和 nonlocal
global表示 不再使用局部作用域中的内容了,而该用全局作用域中的变量
nonlocal表示 在局部作用域中 调用父级空间中的变量