变量的作用域
概念:变量起作用的范围叫做变量的作用域。分为全局变量和局部变量
全局变量:1、在函数和类定义之外声明的变量。作用域为定义的模块,从定义位置开始到模块结束。
2、全局变量降低了函数的通用性和可读性,应尽量避免全局变量的使用。
3、全局变量一般做常量使用。
4、函数内部要改变全局变量的值,要用global声明一下。
局部变量:1、在函数体中(包含形式参数)声明的变量。
2、局部变量使用比全局变量快,优先考虑使用。
3、如果局部变量和全局变量同名,则在函数内部隐藏全局变量,只是用同名的局部变量。
[Python] 纯文本查看 复制代码 #全局变量和局部变量
a = 100 #全局变量
def test01():
b = 10 #局部变量
print(b*10)
test01()
打印结果为:100
这是一个简单地使用全局变量和局部变量的例子。如果在函数中打印a会出现什么结果呢?
[Python] 纯文本查看 复制代码 def test01():
b = 10 #局部变量
print(a)
print(b*10)
我在函数中加了一个print(a) 打印结果为:100
100
可以看出打印的a就是全局变量a的值,如果在函数中重新给a赋值呢?
[Python] 纯文本查看 复制代码 #全局变量和局部变量
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声明一下
[Python] 纯文本查看 复制代码 #全局变量和局部变量
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呢?有没有大佬解答一下?
|