Python3 包模块函数与变量作用域
Posted Sudo高
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python3 包模块函数与变量作用域相关的知识,希望对你有一定的参考价值。
一.Python项目的组织结构
最顶级的组织结构:包(文件夹)
第二个层级:模块(文件)
第三个层级:类
第四个层级:函数、变量(不属于组织结构,是类本身的特性)
二.Python包与模块的名字
1.区分不同包的同名模块:包名.模块名
形成的模块的路径叫做命名空间
2.一个包下面可以有子包,模块可以和包平级
3.普通文件夹想要变成包必须要有__init__.py文件
__init__.py本身也是一个模块,可以不写内容只是标注包
特殊的,__init__.py模块的名字就是包名
三.import 导入模块
对于重复的定义可以从其他模块里引用,不需要重复编写。
1.语法: import 模块名
若被导入模块在子包下面,要加上命名空间,语法:import 子包名.模块名
2.引用导入模块的某一个变量的语法:模块名.变量名
import t.c print(t.c.a)
3.可以用as进行简写
import t.c as m print(m.a) #print(t.c.a)
四.from import
1.导入变量
from t.c import a print(a) #不需要写成print(t.c.a)
2.导入模块(不推荐)
from t import c print(c.a)
3.引用大量变量时使用 * :
from c import *
4."*"会一次性的把模块下面所有的变量或者函数全部导入进来,但是在实际的编码过程中不太可能在引入的时候需要全部的变量,那么就需要我们控制 * 的行为,让 * 导入的时候只导入我们指定的变量。
#test1.c
__all__ = [‘a‘,‘c‘] #用内置变量__all__来控制 * 的选择范围
a = 1
b = 2
c = 3
d = 4
#test1.c2
from c import *
print(a)
print(c)
print(d) #d没有被打印,报错
运行结果:1 3
五.__init__.py 的用法
1.__init__.py文件的作用:
当包被导入时,init.py会首先自动被执行
#t.__init__.py a = ‘This is a __init__.py file‘ print(a) #c11.py import t #导入包t,t里面的__init__.py文件就会被自动执行 运行结果:This is a __init__.py file
假如不导入包,而是导入包里面模块的某个变量,init文件依旧会自动运行
#t.c7.py __all__ = [‘a‘,‘c‘] a = 2 c = 3 d = 4 #c12.py from t.c7 import a 运行结果:This is a __init__.py file
2. __init__.py的应用场景:
#t.__init__.py __all__ = [‘c7‘] #初始化*,标明哪些模块被导出 #t.c7.py __all__ = [‘a‘,‘c‘] a = 2 c = 3 d = 4 #t.c8.py e = 2 f = 3 g = 4 #c11.py from t import * #* 表示导入 t 包里的所有模块 print(c7.a) #c7在init中被定义,可引用 print(c8.e) #c8在init中未定义,不可引用 运行结果是2
3. __init__.py的重要作用
#t包下面的__init__.py import sys #批量导入库,内置标准库 import datetime import io #c13.py import t print(t.sys.path) #在这里插入代码片
六.注意要点
1.包和模块是不会被重复的导入的,只会执行一次
2.避免循环导入,不要形成闭环(多个模块之间形成闭环)
3.导入模块的时候会执行模块里所有的代码
以上是关于Python3 包模块函数与变量作用域的主要内容,如果未能解决你的问题,请参考以下文章