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 如果传递的参数是可变类型,在函数内部,通过方法修改了数据的内容,同样会影响到外部的数据
def demo(num_list):
# 使用方法修改列表的内容
num_list.append(9)
print('函数内部结果:', num_list) gl_list = [1, 2, 3]
demo(gl_list)
print('函数外部结果:', gl_list)
----------------------------------------------
函数内部结果: [1, 2, 3, 9]
函数外部结果: [1, 2, 3, 9]
3.扩展 列表使用 += 运算符
def demo(num, num_list):
print("函数开始")
# num = num + num
num += num # 列表变量使用 += 不会像数字一样做相加再赋值操作
# 本质是在调用列表的 extend 方法
# num_list.extend(num_list)
num_list += num_list
print(num)
print(num_list)
print("函数结束") gl_num = 10
gl_list = [1, 2, 3]
demo(gl_num, gl_list)
print(gl_num)
print(gl_list)
--------------------------------------------------------------
函数开始
20
[1, 2, 3, 1, 2, 3]
函数结束
10
[1, 2, 3, 1, 2, 3]