简述python包模块import和from及all

python指定导入目录路径,称为包导入。
通过import和from导入包模块。
通过all指定导入的模块和导入的模块属性。
1.1 python包import和from用法
import dir1.dir2.modfrom dir1.dir2 import modfrom dir1.dir2.mod import x描述
no内容描述
1 点号分隔 包导入的路径以点号分隔,点号对应机器路径分隔符。
2 目录关系 包名对应机器目录,左边为父目录,右边为子目录。
3 搜索路径 dir1所在父目录必须在模块搜索路径中。
4 init .py 包导入的路径(目录)必须存在 init .py,才能导入成功。 init .py内容可以为空和非空。
5 包初始化 首次导入包时,自动执行 init .py文件内容。
6 模块初始 import dir1.dir2.mod返回模块对象,包含 init .py的全部变量。
7 import import dir1.dir2.mod后,每次使用都需要写全路径:dir1.dir2.mod.x,如果路径有变更,每处使用的地方都要修改。
8 from from dir1.dir2 import mod,使用不需写全路径:mod.x,如果路径有变更,只需修改from一处。
9 as 通过as给import包取别名,简化书写。
示例
# dir1\\__init__.pyprint('在dir1\\__init__.py')a = 1# dir1\\dir2\\__init__.pyprint('在dir1\\dir2\\__init__.py')b = 2# dir1\\dir2\\mod.pyprint('在dir1\\dir2\\mod.py')s = '梯阅线条'# 在 idle 执行下面示例>>> import os>>> path=r'e:\\documents\\f盘'>>> os.chdir(path)# 首次导入自动执行__init__.py>>> import dir1.dir2.mod在dir1\\__init__.py在dir1\\dir2\\__init__.py在dir1\\dir2\\mod.py>>> dir1.dir2.mod.s'梯阅线条'# 再次导入不再执行__init__.py>>> import dir1.dir2.mod# 修改py文件# dir1\\__init__.pyprint('修改在dir1\\__init__.py')a = 1# dir1\\dir2\\__init__.pyprint('修改在dir1\\dir2\\__init__.py')b = 2# dir1\\dir2\\mod.pyprint('修改在dir1\\dir2\\mod.py')s = '修改梯阅线条'# 在 idle 执行下面示例# 直接import不会执行修改后代码>>> import dir1.dir2.mod>>> dir1.dir2.mod.s'梯阅线条'# reload 模块或包重新执行对应__init__.py最新代码>>> reload(dir1.dir2.mod)修改在dir1\\dir2\\mod.py>>> dir1.dir2.mod.s'修改梯阅线条'>>> reload(dir1.dir2)修改在dir1\\dir2\\__init__.py>>> reload(dir1)修改在dir1\\__init__.py# 模块对象 包含__init__.py 全部顶层变量>>> dir1.a1>>> dir1.dir2.b2# import 需要写全路径,否则找不到模块对象>>> dir2.mod.straceback (most recent call last): file , line 1, in dir2.mod.snameerror: name 'dir2' is not defined# from 不需写全路径,只需写import后面变量即可>>> from dir1.dir2 import mod>>> mod.s'修改梯阅线条'# as 给包路径取别名,通过别名访问模块对象属性>>> import dir1.dir2.mod as md>>> md.s'修改梯阅线条'1.2 python模块all列表用法
# moda.py__all__ =['v1','myprint',]描述
python用from module import *导入模块属性时:
no描述
1 模块已定义all列表,则只导入all列表内的属性、方法、类
2 模块未定义all列表,则导入模块的全部顶层属性
3 all写在import语句下面
示例
# e:\\documents\\f盘\\moda.pyimport sys__all__ =['v1','myprint',]print('模块__all__')v1 = '梯阅线条'v2 = 'tyxt.work'def myprint(): print(v2) def myecho(): print(v1) # 在 idle 执行下面示例>>> import os>>> path=r'e:\\documents\\f盘'>>> os.chdir(path)>>> from moda import *模块__all__# 可以访问 __all__ 列表属性>>> v1'梯阅线条'# 不可访问 __all__ 列表外属性>>> v2traceback (most recent call last): file , line 1, in v2nameerror: name 'v2' is not defined>>> myprint()tyxt.work>>> myecho()traceback (most recent call last): file , line 1, in myecho()nameerror: name 'myecho' is not defined1.3 python包all列表用法
# __init__.py__all__ = ['dir1moda',]描述
python用from dir1 import * 导入包模块时:
no描述
1 init .py已定义all列表,则只导入all列表内的模块。
2 init .py未定义all列表,则不会自动导入任何模块,只导入包,可以在 init .py手动导入模块。
3 all写在import语句下面
示例
# 目录结构:# --dir1# ----__init__.py# ----dir1moda.py# ----dir1modb.py# e:\\documents\\f盘\\dir1\\dir1moda.pyprint('在e:\\documents\\f盘\\dir1\\dir1moda.py')# e:\\documents\\f盘\\dir1\\dir1modb.pyprint('在e:\\documents\\f盘\\dir1\\dir1modb.py')# e:\\documents\\f盘\\dir1\\__init__.pyimport sys__all__ = ['dir1moda',]print('修改在dir1\\__init__.py')a = 1# 在 idle 执行下面示例>>> import os>>> path=r'e:\\documents\\f盘'>>> os.chdir(path)>>> from dir1 import *修改在dir1\\__init__.py在e:\\documents\\f盘\\dir1\\dir1moda.py# 在 __all__ 列表内的模块被自动导入,可访问>>> dir1moda.s'在e:\\\\documents\\\\f盘\\\\dir1\\\\dir1moda.py'# 非 __all__ 列表内的模块不自动导入,不可访问>>> dir1modb.straceback (most recent call last): file , line 1, in dir1modb.snameerror: name 'dir1modb' is not defined# 修改__init__.py文件:e:\\documents\\f盘\\dir1\\__init__.py,删除__all__import sysprint('修改在dir1\\__init__.py')a = 1# 重启 idle 执行下面示例>>> import os>>> path=r'e:\\documents\\f盘'>>> os.chdir(path)>>> from dir1 import *修改在dir1\\__init__.py# 未定义__all__ ,不自动导入任何模块,不可访问>>> dir1moda.straceback (most recent call last): file , line 1, in dir1moda.snameerror: name 'dir1moda' is not defined>>> dir1modb.straceback (most recent call last): file , line 1, in dir1modb.snameerror: name 'dir1modb' is not defined# 修改__init__.py文件:手动导入模块import sysfrom dir1 import dir1modaprint('修改在dir1\\__init__.py')a = 1# 重启 idle 执行下面示例>>> import os>>> path=r'e:\\documents\\f盘'>>> os.chdir(path)>>> from dir1 import *在e:\\documents\\f盘\\dir1\\dir1moda.py修改在dir1\\__init__.py# __init__.py 手动导入模块,可访问>>> dir1moda.s'在e:\\\\documents\\\\f盘\\\\dir1\\\\dir1moda.py'>>> dir1modb.straceback (most recent call last): file , line 1, in dir1modb.snameerror: name 'dir1modb' is not defined

闲谈老回与三星的爆炸官司事件,称不该相信三星
零跑冲刺港股上市 计划在上市后规划增程式汽车
便携式气体检测仪的未来发展前景是非常可观的
Mouser供货全球最小的ROHM晶体管
区块链交易平台开发数字资产期货合约交易所开发
简述python包模块import和from及all
工程师电子制作故事:太阳能充电器DIY设计
抗SEU存储器的设计的FPGA实现
供应/回收 HP8591A,HP8594E,SA9270A,
大疆发布无人机专用的飞行眼镜,让你看得更清晰,售价3599元起
电动机故障的人工诊断方法
高通专注毫米波研发,将能给5G市场带来什么
【新闻中心】安科瑞贺绍兴市建筑电气学术委员会2023年学术年会顺利召开
特斯拉将关闭Model S/X电动车生产线?
“智能投影+蓝牙音箱”能发出怎样的火花?
linux内核软中断_linux内核源码详解
光纤激光打标机和紫外打标机区别
从三个角度来看国内新能源汽车
电池模拟器的控制原理
max813l应用电路