14.函数的提高
1.变量作用域
变量作用域 指的就是变量生效的范围,主要分为两类:局部变量和全局变量
①局部变量
所谓 局部变量是定义在函数体内部的变量,就是在函数体内部生效。
变量a是定义在testA函数内部的变量,在函数外部访问就会立马报错
局部变量的作用: 在函数内部,临时保存数据,就是当函数调用完成后,则销毁局部变量。
②全局变量
所谓全局变量,指的就是在函数体[内,外] 都可以生效的变量。
思考:
如果一个数据,在函数A和函数B中 都要使用怎么办?
答:使用全局变量
2.修改全局变量
思考:testB函数需求修改变量a的值为100,怎么书写程序?
怎么让局部变量 变成 全局变量?[使用global关键字:声明x是全局变量]
可以从上图中看的,当我们调用函数B时,输出的是200,此时我们发现B函数调用的是局部变量
3.多函数执行流程
一般在实际开发过程中,一个程序往往由多个函数组成,并且多个函数共享某些数据,如下所示:
①共用 全局变量
4. 返回值作为参数传递
返回值作为参数传递
4.1 函数的返回值(多个返回值)
需求:一个函数有两个返回值1和2
那如果一个函数有多个返回值,该怎么写?
写法:
使用return a,b的写法,返回多个数据。默认是元组类型
return后面可以连接;列表,元组,字典,来返回多个值
5. 函数参数之位置参数
①.位置参数: 调用函数时,根据函数定义的参数位置来传递参数。
注意:传递和定义参数的顺序以及个数 必须一致。
②关键字参数
函数调用,通过"键=值"得形式加以指定。
可以让函数更加清晰,容易使用,同时也清楚了参数的顺序需求。
注意:函数调用的时候,如果有位置参数的时候,位置参数必须在关键字参数的前面,但关键字参数之间不存在先后顺序
③缺省参数(默认参数)
缺省参数也叫默认参数,用于定义函数,为参数提供默认值,调用函数的时候可不传这个默认参数的值(注意:所有位置参数必须出现在默认参数的前面,包括函数定义和调用)
注意:函数调用的时候,如果为缺省参数传值则修改默认参数值;否则使用这个默认值。
④不定长参数(可变参数)
不定长参数也叫可变参数。
用故意不确定调用的时候会传递多少个参数(不传参也可以)的场景。
此时,可用包裹(Packing)位置参数,或者包裹关键字参数,来进行参数传递,显得非常方便。
1.包裹位置传递
注意:传进的所有参数都会被args变量收集,他会根据传进参数的位置合并为一个元组(tuple)。args是元组类型,这就是包裹位置传递。
2.包裹关键字传递
综上:无论是包裹位置传递,还是关键字传递,都是一个组包的过程。
6.拆包
①拆包:元组
把元组数据单独拆出两个变量
②拆包:字典
7.交换变量值
需求: 有变量a = 10和b = 20,交换两个变量的值
①方法一
借助第三方变量存储数据。
方法二:
8. 引用
8.1 了解引用不可变类型
在python中,值是靠引用来传递来的。
我们可以用id()来判断两个变量是否为同一个值的引用。
我们可以将id值理解为那块内存的地址标识。
8.2 了解引用可变类型
9. 引用当做实参
10. 可变和不可变类型
所谓可变类型与不可变类型: 是指数据能够直接进行修改,如果能直接修改那么就是可变,否则是不可变
❥ 可变类型:
①列表
②字典
③集合
❥ 不可变类型:
①整型
②浮点型
③字符串
④元组