**
1,全局变量
**
1,在函数和类定义之外声明的变量。
作用域为定义的模块,从定义位置开始,知道模块结束。
2,全局变量降低了函数的通用性和可读性。应尽量避免全局变量的使用。
3,全局变量一般做常量使用
4,在函数内要改变全局变量的值,要使用global声明一下
全局变量的作用域测试:
a = 100 #全局变量def f1():global a # 在函数内改变全局变量的值,增加global关键字声明print(a) # 打印全局变量a的值a = 400f1()
print(a) # 打印修改后全局变量a的值
运行结果如下:
100
400
**
2,局部变量
**
1,在函数体中(包含形式参数)声明的变量
2,局部变量的引用比全局变量快,优先考虑使用
3,如果局部变量和全局变量同名,则在函数内隐藏全局变量,只使用同名的局部变量
全局变量和局部变量的同名测试
a = 1def f1():a = 400print(a)f1()
print(a)
运行结果为:
400
1
输出局部变量和全局变量
a = 100def f1(a, b, c):print(a, b, c)print(locals())print("*" * 20)print(globals())f1(2, 3, 4)
运行结果为:
2 3 4
{'c': 4, 'b': 3, 'a': 2}
********************
{&#39;__name__&#39;: &#39;__main__&#39;, &#39;__doc__&#39;: None, &#39;__package__&#39;: None, &#39;__loader__&#39;: <_frozen_importlib_external.SourceFileLoader object at 0x00000235B34D4FD0>, &#39;__spec__&#39;: None, &#39;__annotations__&#39;: {}, &#39;__builtins__&#39;: , &#39;__file__&#39;: &#39;E:/06_面向对象/LX_15_单例.py&#39;, &#39;__cached__&#39;: None, &#39;a&#39;: 100, &#39;f1&#39;: }
**
3&#xff0c;全局和局部变量的效率测试
**
局部变量的查询和访问速度比全局变量块&#xff0c;尤其是在循环的时候。应优先考虑
在特别强调效率的地方或者循环次数较多的地方&#xff0c;可以将全局变量转为局部变量提高运行速度
效率测试操作如下&#xff1a;
import time
import mathdef test01():start &#61; time.time()for i in range(1000000):math.sqrt(30)end &#61; time.time()print("test01耗时{0}".format(end-start))def test02():start &#61; time.time()b &#61; math.sqrtfor i in range(1000000):b(30)end &#61; time.time()print("test02耗时{0}".format(end-start))test01()
test02()
运行结果如下图所示&#xff1a;
test01耗时0.4827232360839844
test02耗时0.23786211013793945