函数2
目标:
- 变量作用域
- 多函数程序执行流程
- 函数的返回值
- 函数的参数
- 拆包和交换两个变量的值
- 引用
- 可变和不可变类型
一、变量作用域
变量的作用域指的是变量生效的范围,主要分为两类:局部变量和全局变量
- 局部变量
所谓局部变量是定义在函数体内的部的变量,即只在函数体内部生效
def testA():
a=100
print(a)
testA()#100
print(a)# 报错:name 'a' is not defined
变量a是定义在testA函数内部的变量,在函数外部访问则立即报错
局部变量的作用:在函数体内部,临时保存数据,即当函数调用完成后,则销毁局部变量
- 全局变量
所谓全局变量,指的是在函数体内,外都能生效的变量
思考:如果有一个数据,在函数A和函数B中都要使用,该怎么办?
答:将这个数据存储在一个全局变量里面
#定义全局变量a
a=100
def testA():
print(a)
# 访问全局变量a,并打印变量a存储的数据
def testB():
print(a)#访问全局变量a,并打印变量a存储的数据
testA()#100
testB()#100
思考: testB 函数需求修改变量a的值为200,如何修改程序?
#定义全局变量a
a=100
def testA():
print(a)
# 访问全局变量a,并打印变量a存储的数据
def testB():
a=200
print(a)#访问全局变量a,并打印变量a存储的数据
testA()#100
testB()#200
print(f'全局变量a={a}') #全局变量a=100
思考:在 testB 函数内部的 a = 200 中的变量a是在修改全局变量 a 吗?
答:不是。观察上述代码发现,15行得到a的数据是100,仍然是定义全局变量a时候的值,而没有返回testB 函数内部的200。综上: testB 函数内部的 a = 200 是定义了一个局部变量。
思考:如何在函数体内部修改全局变量?
#定义全局变量a
a=100
def testA():
print(a)
# 访问全局变量a,并打印变量a存储的数据
def testB():
# global 关键字声明a是全局变量
global a
a=200
print(a)
testA()#100
testB()#200
print(f'全局变量a={a}') #全局变量a=200