admin 管理员组文章数量: 887032
2024年1月5日发(作者:dscq2000)
1 python包模块import和from及__all__
python指定导入目录路径,称为包导入。
通过import和from导入包模块。
通过__all__指定导入的模块和导入的模块属性。
1.1 python包import和from
用法
import
from 2 import mod
from import x
描述
NO 内容
1
2
3
4
5
6
7
8
9
示例
# dir1__init__.py
print('在dir1__init__.py')
a = 1
# dir1dir2__init__.py
print('在dir1dir2__init__.py')
b = 2
#
print('在')
s = '梯阅线条'
# 在 idle 执行下面示例
>>> import os
>>> path=r'E:documentsF盘'
描述
包导入的路径以点号分隔,点号对应机器路径分隔符。
包名对应机器目录,左边为父目录,右边为子目录。
dir1所在父目录必须在模块搜索路径中。
包导入的路径(目录)必须存在__init__.py,才能导入成功。__init__.py内容可以为空和非空。
首次导入包时,自动执行__init__.py文件内容。
import 返回模块对象,包含__init__.py的全部变量。
import 后,每次使用都需要写全路径:.x,如果路径有变更,每处使用的地方都要修改。
from 2 import mod,使用不需写全路径:mod.x,如果路径有变更,只需修改from一处。
通过as给import包取别名,简化书写。
点号分隔
目录关系
搜索路径
__init__.py
包初始化
模块初始
import
from
as
>>> (path)
# 首次导入自动执行__init__.py
>>> import
在dir1__init__.py
在dir1dir2__init__.py
在
>>> .s
'梯阅线条'
# 再次导入不再执行__init__.py
>>> import
# 修改py文件
# dir1__init__.py
print('修改在dir1__init__.py')
a = 1
# dir1dir2__init__.py
print('修改在dir1dir2__init__.py')
b = 2
#
print('修改在')
s = '修改梯阅线条'
# 在 idle 执行下面示例
# 直接import不会执行修改后代码
>>> import
>>> .s
'梯阅线条'
# reload 模块或包重新执行对应__init__.py最新代码
>>> reload()
修改在
>>> .s
'修改梯阅线条'
>>> reload(2)
修改在dir1dir2__init__.py
>>> reload(dir1)
修改在dir1__init__.py
# 模块对象 包含__init__.py 全部顶层变量
>>> dir1.a
1
>>> 2.b
2
# import 需要写全路径,否则找不到模块对象
>>> .s
Traceback (most recent call last):
File "
.s
NameError: name 'dir2' is not defined
# from 不需写全路径,只需写import后面变量即可
>>> from 2 import mod
>>> mod.s
'修改梯阅线条'
# as 给包路径取别名,通过别名访问模块对象属性
>>> import as md
>>> md.s
'修改梯阅线条'
1.2 python模块__all__列表
用法
#
__all__ =['v1','myprint',]
描述
python用from module import *导入模块属性时:
NO 描述
1
2
3
示例
# E:documentsF盘
import sys
__all__ =['v1','myprint',]
print('模块__all__')
v1 = '梯阅线条'
v2 = ''
def myprint():
print(v2)
def myecho():
print(v1)
模块已定义__all__列表,则只导入__all__列表内的属性、方法、类
模块未定义__all__列表,则导入模块的全部顶层属性
__all__写在import语句下面
# 在 idle 执行下面示例
>>> import os
>>> path=r'E:documentsF盘'
>>> (path)
>>> from moda import *
模块__all__
# 可以访问 __all__ 列表属性
>>> v1
'梯阅线条'
# 不可访问 __all__ 列表外属性
>>> v2
Traceback (most recent call last):
File "
v2
NameError: name 'v2' is not defined
>>> myprint()
>>> myecho()
Traceback (most recent call last):
File "
myecho()
NameError: name 'myecho' is not defined
1.3 python包__all__列表
用法
# __init__.py
__all__ = ['dir1moda',]
描述
python用from dir1 import * 导入包模块时:
NO 描述
1
2
3
示例
# 目录结构:
# --dir1
# ----__init__.py
__init__.py已定义__all__列表,则只导入__all__列表内的模块。
__init__.py未定义__all__列表,则不会自动导入任何模块,只导入包,可以在__init__.py手动导入模块。
__all__写在import语句下面
# ----
# ----
# E:documentsF盘
print('在E:documentsF盘')
# E:documentsF盘
print('在E:documentsF盘')
# E:documentsF盘dir1__init__.py
import sys
__all__ = ['dir1moda',]
print('修改在dir1__init__.py')
a = 1
# 在 idle 执行下面示例
>>> import os
>>> path=r'E:documentsF盘'
>>> (path)
>>> from dir1 import *
修改在dir1__init__.py
在E:documentsF盘
# 在 __all__ 列表内的模块被自动导入,可访问
>>> dir1moda.s
'在E:documentsF盘'
# 非 __all__ 列表内的模块不自动导入,不可访问
>>> dir1modb.s
Traceback (most recent call last):
File "
dir1modb.s
NameError: name 'dir1modb' is not defined
# 修改__init__.py文件:E:documentsF盘dir1__init__.py,删除__all__
import sys
print('修改在dir1__init__.py')
a = 1
# 重启 idle 执行下面示例
>>> import os
>>> path=r'E:documentsF盘'
>>> (path)
>>> from dir1 import *
修改在dir1__init__.py
# 未定义__all__ ,不自动导入任何模块,不可访问
>>> dir1moda.s
Traceback (most recent call last):
File "
dir1moda.s
NameError: name 'dir1moda' is not defined
>>> dir1modb.s
Traceback (most recent call last):
File "
dir1modb.s
NameError: name 'dir1modb' is not defined
# 修改__init__.py文件:手动导入模块
import sys
from dir1 import dir1moda
print('修改在dir1__init__.py')
a = 1
# 重启 idle 执行下面示例
>>> import os
>>> path=r'E:documentsF盘'
>>> (path)
>>> from dir1 import *
在E:documentsF盘
修改在dir1__init__.py
# __init__.py 手动导入模块,可访问
>>> dir1moda.s
'在E:documentsF盘'
>>> dir1modb.s
Traceback (most recent call last):
File "
dir1modb.s
NameError: name 'dir1modb' is not defined
版权声明:本文标题:python包模块import和from及__all__ 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.freenas.com.cn/jishu/1704458011h460625.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论