Python: 深入Python模块的使用
May 27, 2015
Table of Contents
1. 模块的导入
另外一种导入方式为
从file_name中导入所有:
如果你一直在某个环境,比如解释器下面,你已经导入过某个模块 ,现在你对模块进行了修改,这里你需要用reload(modulename)来重新载入。
模块中的主函数:
if __name__ == "__main__>": import sys fib(int(sys.argv[1]))
2. 模块的搜索路径
首先会搜索解析器的当前目录。然后会到sys.path变量中给出的目录列表中查找。
>>> import sys >>> sys.path ['', '/usr/lib/python3.4', '/usr/lib/python3.4/plat-x86_64-linux-gnu', '/usr/lib/python3.4/lib-dynload', '/usr/local/lib/python3.4/dist-packages', '/usr/lib/python3/dist-packages']
- 输入脚 本的目录(当前目录)
-
环境变量
PYTHONPATH 表示的目录列表中搜索 - Ptyon的默认安装路径中搜索。
3. 内置模块
>>> import fibo >>> dir(fibo) ['__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', 'fib', 'fib2'] >>> dir() ['__builtins__', '__doc__', '__loader__', '__name__', '__package__', '__spec__', 'fibo']
4. 包
当不同作的模块进行按文件夹分类后再组成一个整体的库,可以称为包。
sound/ Top-level package __init__.py Initialize the sound package formats/ Subpackage for file format conversions __init__.py wavread.py wavwrite.py aiffread.py aiffwrite.py auread.py auwrite.py ... effects/ Subpackage for sound effects __init__.py echo.py surround.py reverse.py ... filters/ Subpackage for filters __init__.py equalizer.py vocoder.py karaoke.py ...
为了让Python将目录当做内容包,目录中必须包含
包有两种导入模块或模块内函数的/变量的方式:
from package import item # 这种方式,item可以是包中的一个子模块或子包,也可以是包中定义的其他命名,像函数、类、变量。 import item.subitem.subsubitem # 这些子项必须是包,最后的子项是包或模块。但不能为函数、类或变量。
5. 从 * 导入包
那么当用户写下
对于包的作者来说唯一的解决方案就是给提供一个明确的包索引。import 语句按如下条件进行转换:执行
__all__ = ["echo>", "surround>", "reverse>"]
这意味着
如果没有定义
import sound.effects.echo import sound.effects.surround from sound.effects import *
在这个例子中,echo 和 surround 模块导入了当前的命名空间,这是因为执行 from…import 语句时它们已经定义在 sound.effects 包中了(定义了
尽管某些模块设计为使用 import * 时它只导出符全某种模式的命名,仍然不建议在生产代码中使用这种写法。
记住,from Package import specific_submodule 没有错误!事实上,除非导入的模块需要使用其它包中的同名子模块,否则这是推荐的写法。
0 Comments