cccyyys 发表于 2021-6-12 14:55

【笔记】变量的作用域(全局变量和局部变量)

变量的作用域
概念:变量起作用的范围叫做变量的作用域。分为全局变量和局部变量
全局变量:1、在函数和类定义之外声明的变量。作用域为定义的模块,从定义位置开始到模块结束。
2、全局变量降低了函数的通用性和可读性,应尽量避免全局变量的使用。
3、全局变量一般做常量使用。
4、函数内部要改变全局变量的值,要用global声明一下。
局部变量:1、在函数体中(包含形式参数)声明的变量。
2、局部变量使用比全局变量快,优先考虑使用。
3、如果局部变量和全局变量同名,则在函数内部隐藏全局变量,只是用同名的局部变量。
#全局变量和局部变量
a = 100#全局变量
def test01():
    b = 10 #局部变量
    print(b*10)

test01()
打印结果为:100
这是一个简单地使用全局变量和局部变量的例子。如果在函数中打印a会出现什么结果呢?
def test01():
    b = 10 #局部变量
    print(a)
    print(b*10)
我在函数中加了一个print(a)打印结果为:100
100
可以看出打印的a就是全局变量a的值,如果在函数中重新给a赋值呢?
#全局变量和局部变量
a = 100#全局变量
def test01():
    b = 10 #局部变量
    a = 20
    print(a)
    print(b*10)
print(a)
test01()

打印结果为:100
20
100
我们会发现在函数外打印的变量a还是100,没有变化,但是在函数内打印的a是重新赋值的20。这是为什么呢?
这是因为函数中的a是一个局部变量,和全局变量a属于两个概念,不能混为一谈。根据局部变量的特点,如果局部变量和全局变量同名,则在函数内部隐藏全局变量,只是用同名的局部变量。在函数内打印的是局部变量a,并不是全局变量,而且函数内部要改变全局变量的值,要用global声明一下。所以这里并不是改变全局变量a的值,只是重新定义一个局部变量。如果要在函数内部改变全局变量的值,需要使用global声明一下
#全局变量和局部变量
a = 100#全局变量
def test01():
    b = 4 #局部变量
    print(b*10)

    global a#使用global声明该变量为全局变量,并修改a的值
    a = 20
    print(a)

print(a)
test01()
打印结果为:100
40
20
这个我看了半天没有错误啊,但是为什么在函数外打印a还是100呢?有没有大佬解答一下?

cccyyys 发表于 2021-6-12 14:56

求大佬解答    为什么最后一个已经用global声明了,但是还是没有改变全局变量的值呢?

pjchangew 发表于 2021-6-12 15:21

无闻无问 发表于 2021-6-12 18:12

本帖最后由 无闻无问 于 2021-6-12 18:14 编辑

很简单啊
print(a)#先执行它,此时a为100
test01#再执行函数调用,a被重新赋值为20


函数定义虽然在前,但未调用不会执行…

cccyyys 发表于 2021-6-12 19:14

好吧,我明白了:sleepy:谢谢各位

木头MT 发表于 2021-6-27 15:46

代码执行顺序问题
页: [1]
查看完整版本: 【笔记】变量的作用域(全局变量和局部变量)