第五章 python的函数(4):变量的作用域
在本篇,我们来聊一下python中变量的作用域。
什么是变量的作用域?
变量的作用域就是变量的有效范围
- 全局变量:程序一开始定义的变量
- 作用域:整个程序
- 一般用纯大写英文定义
- 局部变量:函数/类中定义的变量
- 作用域:定义该变量的函数/类(和子函数/类)
- 变量的查找顺序:
- 局部>父级>..>全局
注意:同名的全局变量个局部变量是完全独立的变量,局部变量可以继承全局变量的内存地址。
- 考虑以下代码的执行结果:
g1 = 1
def func1():
x1 = 'local variable'
print(x1)
print(g1)
print(g2)
print(g3)
g2 = 2
# func1() # 报错,因为在这里还没有定义g3,所以函数没法打印g3
g3 = 3
func1()
g1 = 1111
def func2():
print(g1,g2)
func1()
func2() # 每次调用函数,相当于将函数体插入这里执行。
函数可以互相调用,但是只能调用在全局定义的函数,嵌套函数不能调用
5.4.2 locals,globals函数
- locals() 函数可以返回所有局部变量(以字典形式返回)。
- globals() 函数可以返回所有的全局变量(字典)
g1 = 1 # 全局变量
def func1():
x1 = 'local variable' #局部变量
x2 = 'aaa' #局部变量
x3 = 'bbb' #局部变量
print(locals()) # 打印局部变量
print(globals()) # 打印全局变量,也会返回很多默认的全局变量
func1()
执行结果:
{'x1': 'local variable', 'x2': 'aaa', 'x3': 'bbb'}
{'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x0000000000191CF8>, '__spec__': None, '__annotations__': {}, '__builtins__': <module 'builtins' (built-in)>, '__file__': 'C:/Users/kouneli/Desktop/python/temp/test.py', '__cached__': None, 'g1': 1, 'func1': <function func1 at 0x0000000001D1C1E0>}
以上就是python变量作用域的一些介绍。