1.局部变量和全局变量
1.1局部变量
局部变量是在函数内部定义的变量,只能在定义函数的内部使用
函数执行结束后,函数内部的局部变量会被系统收回
不同函数可以定义相同名字的局部变量,但是各用个的互不影响
局部变量的生命周期:
1.所谓生命周期就是变量从被创建到被系统回收的过程
2.局部变量在函数被调用时才会被创建
3.函数执行结束后局部变量被系统回收
4.局部变量在生命周期内,可以用来存储函数内部临时使用到的数据
1.2全局变量
全局变量是在函数外部定义的变量(没有定义在某一个函数内),所有函数内部都可以使用这个变量
注意:函数执行时,在需要处理变量时会:
1.首先查找 函数内部 是否存在 指定名称的局部变量,如果有,直接使用
2.如果没有,查找 函数外部 是否存在 指定名称的全局变量,如果有,直接使用
3.如果还有没, 程序报错!
2)函数不能直接修改全局变量的引用
在函数内部可以通过全局变量的引用获取对应的数据,但是不允许直接修改全局变量的引用
3)在函数内部修改全局变量的值
如果在函数内部需要修改全局变量的值,需要使用关键字 global 进行声明
2.函数的参数
2.1 在函数内部,针对形参使用赋值语句,并不会影响到调用函数时传递的实参变量的值
无论传递的参数是可变还是不可变,只要针对参数使用赋值语句,只会在函数内部修改局部变量的引用,不会影响到外部变量的引用
>>> def demo(num, list): ... print('函数内部代码') #在函数内部,针对参数使用赋值语句,不会修改到外部的实参变量 ... num = 100 ... list = [1,2,3] ... print(num) ... print(list) ... print('函数代码完成') ... >>> gl_num = 99 >>> gl_list = [4,5,6] >>> demo(gl_num,gl_list) 函数内部代码 100 [1, 2, 3] 函数代码完成 >>> print(gl_num) 99 >>> print(gl_list) [4, 5, 6]
2.2 如果传递的参数是可变类型,在函数内部,通过方法修改了数据的内容,同样会影响到外部的数据
1 def demo(num_list): 2 # 使用方法修改列表的内容 3 num_list.append(9) 4 print('函数内部结果:', num_list) 5 6 7 gl_list = [1, 2, 3] 8 demo(gl_list) 9 print('函数外部结果:', gl_list) 10 ---------------------------------------------- 11 函数内部结果: [1, 2, 3, 9] 12 函数外部结果: [1, 2, 3, 9]
3.扩展 列表使用 += 运算符
1 def demo(num, num_list): 2 print("函数开始") 3 # num = num + num 4 num += num 5 6 # 列表变量使用 += 不会像数字一样做相加再赋值操作 7 # 本质是在调用列表的 extend 方法 8 # num_list.extend(num_list) 9 num_list += num_list 10 print(num) 11 print(num_list) 12 print("函数结束") 13 14 15 gl_num = 10 16 gl_list = [1, 2, 3] 17 demo(gl_num, gl_list) 18 print(gl_num) 19 print(gl_list) 20 -------------------------------------------------------------- 21 函数开始 22 20 23 [1, 2, 3, 1, 2, 3] 24 函数结束 25 10 26 [1, 2, 3, 1, 2, 3]