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)
posted @ 2023-06-05 18:14  万溪汇海  阅读(11)  评论(0编辑  收藏  举报