变量的作用域

目标:

  1. 知道什么是局部变量
  2. 知道什么是全局变量

1. 变量作用域

变量作用域指的是变量生效的范围,主要分为两类:局部变量全局变量

  • 局部变量

所谓局部变量是定义在函数体内部的变量,即只在函数体内部生效。

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 = 100


def testA():
    print(a)


def testB():
    a = 200
    print(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 = 100


def testA():
    print(a)


def testB():
    # global 关键字声明a是全局变量
    global a
    a = 200
    print(a)


testA()  # 100
testB()  # 200
print(f'全局变量a = {a}')  # 全局变量a = 200

2. 小结

  • 局部变量: 就是在函数内部定义的变量
    • 其作用范围是这个函数内部,即只能在这个函数中使用,在函数的外部是不能使用的
    • 因为其作用范围只是在自己的函数内部,所以不同的函数可以定义相同名字的局部变量(打个比方,把你、我是当做成函数,把局部变量理解为每个人手里的手机,你可有个iPhone8,我当然也可以有个iPhone8了, 互不相关)
    • 局部变量的作用,为了临时保存数据需要在函数中定义变量来进行存储
    • 全局变量: 如果一个变量,既能在一个函数中使用,也能在其他的函数中使用,这样的变量就是全局变量, 这样的变量一般在函数外部定义
    • 在函数外边定义的变量叫做全局变量
    • 全局变量能够在所有的函数中进行访问