Ⅰ 函数的可变长参数
在形参中*与**的应用
* 站在实参的角度:可变长指的是参数的个数不固定,如果参数的个数不固定,那么形参对应着要有能够接受溢出实参的功能;在形参名前面加*:那么*会把多余的位置实参存成元组,然后赋值给其后的形参名:
![](https://img.haomeiwen.com/i23972684/111e6f42de5dcbe4.png)
同时:func(1) 可以只传给x一个值,也就是说*y可以不被传值,但是x必须被传值
** 在形参名前加** : 会把多余的关键字实参存成字典,然后赋值给气候的形参名:
![](https://img.haomeiwen.com/i23972684/ad19b7e5f1cbc8b5.png)
在实参中用*与**
在实参前加*:会把其后的值打散成位置实参(所有可以被for循环的都可以在前面加*):
![](https://img.haomeiwen.com/i23972684/ce9682c3906a5d03.png)
在实参后面加**:会把其后的值打散成关键字实参(只能是字典(就目前水平)):
![](https://img.haomeiwen.com/i23972684/68d1062b14eae4b0.png)
形参与实参中混用*与**
python中*后面默认跟args变量名,**后面跟kwargs:
![](https://img.haomeiwen.com/i23972684/aa97afcbfaa6b8ef.png)
命名关键字形参:在def func(x,y=222,*args,n=777,m,**kwargs): 需要注意的是默认形参只有一个y=222; 在*与**之间的n=777和m都属于关键字形参(不再属于默认形参和位置形参),只能使用关键字的方式进行传值:
![](https://img.haomeiwen.com/i23972684/5458ac487da3c721.png)
Ⅱ 函数对象
函数对象指的是函数可以被当成变量去使用:
![](https://img.haomeiwen.com/i23972684/feb558d059581fc2.png)
函数可以被当成变量赋值给变量名:
![](https://img.haomeiwen.com/i23972684/f26e34c775b4994e.png)
函数可以被当作参数传给另一个函数:
![](https://img.haomeiwen.com/i23972684/f9b350afcd7512ec.png)
还可以当成一个函数的返回值:
![](https://img.haomeiwen.com/i23972684/d45012c901be0459.png)
函数可以当成容器类型的元素:
![](https://img.haomeiwen.com/i23972684/9296494d01a6a086.png)
Ⅲ 函数的嵌套
函数的嵌套调用:
![](https://img.haomeiwen.com/i23972684/4ed7ba9142e5342b.png)
函数的嵌套定义:
![](https://img.haomeiwen.com/i23972684/3bd5c197ca6f6f8d.png)
Ⅳ 名称空间:就是存放名字的地方
内置名称空间
存放的是内置的名字如:print\input\len;生命周期:解释器启动则产生,解释器关闭则销毁
全局名称空间
存放的是顶级的名字(顶级的代码);生命周期python程序运行时则产生,python程序结束则销毁:
![](https://img.haomeiwen.com/i23972684/c70080e12b8e5a00.png)
局部名称空间
函数内的名字;生命周期:调用函数时则产生,函数调用结束则销毁:
![](https://img.haomeiwen.com/i23972684/f723be33acebbd40.png)
名称的查找优先级
从当前位置往外查找,如果当前在局部:局部==>全局==>内置
从当前位置往外查找,如果当前在全局:全局==>内置
![](https://img.haomeiwen.com/i23972684/db5570283c67995f.png)
结论:名称空间的嵌套关系是函数定义阶段(及扫描语法时),就固定死的,与函数的调用位置无关
Ⅴ 作用域
全局范围\全局作用域:内置名称空间+全局名称空间;特点:全局存活,全局有效
局部范围\局部作用域:局部名称空间;特点:临时存活,局部有效
Ⅵ 了解知识 (global 和 nonlocal)
global 作用:在局部变量可以修改全局的变量,需要事前声明
![](https://img.haomeiwen.com/i23972684/60b48fcd89cf4f9f.png)
nonlocal 作用:声明变量名是来自于外层函数(不包含全局空间)
![](https://img.haomeiwen.com/i23972684/cf38f82a9a88e41e.png)
网友评论