python作用域

发布时间 2023-06-05 18:17:01作者: 那年腹黑兔

1 变量作用域

变量(所有在内存中的数据)作用域:LEGB

L:Local 本地作用域(局部作用域),函数内部
E:Enclosed 闭包作用于,两个函数之间的,
G:Gobal全局作用域(这个文件)
B:Builtln 内置作用域(全局通用)(pprint(builtins))

内置:在任何地方,都可以直接使用
全局:在本文件的任何地方,可以直接使用

访问顺序:当我们访问某个变量时,会按照L->E->G->B的顺序去

2 变量升级

如何让变量升级

2.1.gloabl关键字和nonlocal关键字

gloabl关键字 让变量升级到全局作用域
nonlocal关键字 闭包作用域

def f1():
    #name="f1"
    global f2

    def f2():
        #nonlocal name
        #name="f2"
        print(name)

f1()
f2()

可以让同名但是不同值的变量,同时存在

怎么创造新的作用域:
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)