Python学习笔记(十八)
局部变量的生命周期
所谓生命周期就是变量从被创建到被系统回收的过程
局部变量在函数执行时才会被创建
函数执行结束后,局部变量被系统回收
局部变量在生命周期内,可以用来存储函数内部临时使用的数据
不同的函数,可以定义相同名字的局部变量,且彼此之间不会产生影响
全局变量
全局变量是在函数外部定义的变量,所有函数内部都可以使用这变量
注意:在函数执行时,需要处理变量时,会:
1、首先查找函数内部是否存在指定名称的局部变量,如果有,则直接使用
2、如果没有,查找函数外部是否存在指定名称的全局变量,如果有,直接使用
3、如果还没有,程序报错
函数不能直接修改全局变量的引用
在函数内部,可以通过全局变量的引用获取对应的数据
但是,不允许直接修改全局变量的引用--使用赋值语句修改全局变量的值
在函数内部修改全局变量的值
如果在函数中需要修改全局变量,需要使用global使用声明
注意:
全局变量是在调用函数之后定义的,由于执行逻辑顺序是从上到下,在执行函数的时候,变量还没有定义,
所以程序会报错
代码结构示意图如下
shebang
import模块
全局变量
函数定义
执行代码
全局变量命名的建议
为了避免局部变量和全局变量出现混淆,在定义全局变量时,有些公司会有一些开发要求,例如:
全局变量名前应该增加g_或者gl_的前缀
提示:具体的要求格式,各公司要求可能会有些差异
函数参数和返回值的作用
函数根据有没有参数以及有没有返回值,可以相互组合,一共有4种组合模式
1、无参数,无返回
2、无参数,有返回
3、有参数,无返回
4、有参数,有返回
定义函数时,是否接收参数,或者是否返回结果,是根据实际的功能需求来决定的
1、如果函数内部处理的数据不确定,就可以将外界的数据以参数传递到函数内部
2、如果希望一个函数执行完成后,向外界汇报执行结果,就可以增加函数的返回值
函数的返回值 进阶
在程序开发中,有时候,会希望一个函数执行结束后,告诉调用者一个结果,以便调用者针对具体的结果做后续的处理
返回值是函数完成工作后,最后给调用者的一个结果
在函数中使用return关键字可以返回结果
调用函数一方,可以使用变量来接收函数的返回结果
面试题:
交换两个数字
题目要求:
1、有两个整数变量a=6,b=100
2、不使用其他变量,交换两个变量的值
解法1 - 使用加减法:
a = a + b
b = a - b
a = a - b
解法2 - Python专有,利用元祖:
a,b = b , a
函数的参数 进阶
问题1:
在函数内部,针对参数使用赋值语句,会不会影响调用函数时传递的实参变量?
答:不会!
不可变和可变的参数
无论是传递的参数是可变还是不可变
只要针对参数使用赋值预计,会在函数内部修改局部变量的引用,不会影响外部变量的引用
问题2:
如果传递的参数是可变类型,在函数内部,使用方法修改了数据的内容,同样会影响到外部的数据
面试题: --- +=
在Python中,列表变量调用+=本质上是在执行变量的extend方法,不会修改变量的引用
缺省参数
定义函数时,可以给某个参数指定一个默认值,具有默认值的参数就叫做缺省参数
调用函数时,如果没有传入缺省参数的值,则在函数内部定义函数时指定的参数默认值
函数的缺省参数,将常见的值设置为参数的缺省值,从而简化函数的调用