从空间角度研究函数python
全局名称空间: py文件运行时开辟的,存放的是执行的py文件(除去函数内部)的全部的变量与值(地址)的对应关系,整个py文件结束以后,才会消失。函数
临时(局部)名称空间: 函数执行时,在内存中临时开辟的一个空间,存放的函数中的变量与值的对应关系,随着函数的结束而消失。code
内置名称空间:input,print,内置函数等。内存
取值顺序加载顺序作用域
加载顺序:上面这三个空间,谁先加载到内存。input
内置名称空间 ----》 全局名称空间 ----》 (函数执行时)临时名称空间io
取值顺序:(就近原则)class
做用域变量
全局做用域:全局名称空间,内置名称空间。文件
局部做用域:局部名称空间。
# count = 0 # # def func(): # count += 1 # func() #报错 # UnboundLocalError: local variable 'count' referenced before assignment # 解释器认为:若是你在局部做用域对一个变量进行修改了, # 你在局部做用域已经定义好这个变量了。
能够在局部做用域声明一个全局变量。
# 这是剪切 # def func(): # 在全局定义一个变量name # global name # name = 1 # # print(globals()) # # print(locals()) # name += 1 # print(globals()) # # # func() # # print(name) # print(globals())
能够修改全局变量。
# count = 0 # # def func(): # global count # count += 1 # # print(count) # func() # print(count)
# 这是复制 # def func(): # count = 0 # def inner(): # nonlocal count # count += 1 # print(count) # print(locals()) # inner() # print(locals()) # func() # UnboundLocalError: local variable 'count' referenced before assignment # 解释器认为:若是你在局部做用域对一个变量进行修改了, # 你在局部做用域已经定义好这个变量了。