python作用域
1 变量作用域
变量(所有在内存中的数据)作用域:LEGB
L:Local 本地作用域(局部作用域),函数内部
E:Enclosed 闭包作用于,两个函数之间的,
G:Gobal全局作用域(这个文件)
B:Builtln 内置作用域(全局通用)(pprint(builtins))
内置:在任何地方,都可以直接使用
全局:在本文件的任何地方,可以直接使用
访问顺序:当我们访问某个变量时,会按照L->E->G->B的顺序去
2 变量升级
如何让变量升级
2.1.global关键字和nonlocal关键字
global关键字 让变量升级到全局作用域
nonlocal关键字 闭包作用域
def f1(): #name="f1" global f2 def f2(): #nonlocal name #name="f2" print(name) f1() f2()
全局变量和局部变量重名,global修改全局变量的值,优秀使用局部变量的值
1 #全局变量 2 a=888 3 c=666 4 def func(): 5 #局部变量 6 #使用global关键字申明全局变量:申明的局部变量直接变成全局变量,会对之前的值进行覆盖 7 global c 8 b=999 9 c=777 10 #函数里面可以使用局部变量也可以使用全局变量 11 print(f"使用全局变量{a}") 12 print(f"使用全局变量{b}") 13 print(f"在函数内部使用全局变量{c}") 14 15 #调用完函数之后,全局变量c之前的666值会被修改为777 16 #所以函数调用完修改完成之后,再打印全局变量c的值就是777 17 func() 18 #使用全局变量 19 print(f"在函数外部使用全局变量{a}") 20 print(f"在函数外部使用全局变量{c}")
可以让同名但是不同值的变量,同时存在
怎么创造新的作用域:
B G是不需要创造
L E通过定义函数来创造
判断、循环、类:都不能创造作用域
2.2 模块导入
文件:模块
文件夹:包
解决变量(数据)跨文件访问:模块导入
模块导入
from a import name(name是a.py文件的全局变量)#覆盖本文件的全局作用域 print(name) import a print(a.name)
什么样的python文件都可以被导入吗?
- 文件名符合变量名要求的.py结尾的python文件
- 文件存在于sys.path路径内
import sys sys.path.append("D:\lgs\paramter")#包加入到系统路径 for p in sys.path: print(p)
什么样的python文件夹可以被导入?
- 文件名夹符合变量名要求的
- 文件夹存在sys.path路径内容
- 文件夹包含了模块(普通模块,特殊模块:__init__.py)