python教程:变量的作用域(全局变量和局部变量)

变量的作用域(全局变量和局部变量)

变量起作用的范围称为变量的作用域,不同作用域内同名变量之间互不影响。变量分为:全
局变量、局部变量。

全局变量:

  1. 在函数和类定义之外声明的变量。作用域为定义的模块,从定义位置开始直到模块
    结束。
  2. 全局变量降低了函数的通用性和可读性。应尽量避免全局变量的使用。
  3. 全局变量一般做常量使用。
  4. 函数内要改变全局变量的值,使用 global 声明一下

局部变量:

  1. 在函数体中(包含形式参数)声明的变量。
  2. 局部变量的引用比全局变量快,优先考虑使用。
  3. 如果局部变量和全局变量同名,则在函数内隐藏全局变量,只使用同名的局部变量

代码:全局变量的作用域测试

a = 100 #全局变量
def f1():
	global a #如果要在函数内改变全局变量的值,增加 global 关键字声明
	print(a) #打印全局变量 a 的值
	a = 300
f1()
print(a)

执行结果:

100
300

代码:全局变量和局部变量同名测试

a=100
def f1():
	a=3 #同名的局部变量
	print(a)
f1()
print(a)
#a 仍然是 100,没有变化

执行结果:

3
100

代码:输出局部变量和全局变量

a = 100
def f1(a,b,c):
	print(a,b,c)
	print(locals())
	print("#"*20)
	print(globals())
f1(2,3,4)

执行结果:

234
{'c': 4, 'b': 3, 'a': 2}
####################
{'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <class
'_frozen_importlib.BuiltinImporter'>,
 '__spec__':
 None,
 '__annotations__':
 {},
'__builtins__': <module 'builtins' (built-in)>, '__file__': 'E:\\PythonExec\\if_test01.py',
'a': 100, 'f1': <function f1 at 0x0000000002BB8620>}

局部变量和全局变量效率测试

局部变量的查询和访问速度比全局变量快,优先考虑使用,尤其是在循环的时候。
在特别强调效率的地方或者循环次数较多的地方,可以通过将全局变量转为局部变量提高运行速度。

代码:测试局部变量和全局变量效率

#测试局部变量、全局变量的效率
import math
import time

def test01():
	start = time.time()
	for i in range(10000000):
		math.sqrt(30)
	end = time.time()
	print("耗时{0}".format((end-start)))
def test02():
	b = math.sqrt
	start = time.time()
	for i in range(10000000):
		b(30)
	end = time.time()
	print("耗时{0}".format((end-start)))

test01()
test02()

运行结果:

耗时 2.3589999675750732
耗时 1.6410000324249268

多次运行结果对比:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/a772304419/article/details/132891829