目录
一 介绍
随着程序越来越长,为
了方便维护,最好把脚本拆分成多个文件。编写脚本还一个好处,不同程序调用同一个函数时,不用每次把函数复制到各个程序。
Python 模块(Module),是一个 Python 文件,以 .py 结尾,包含了 Python 对象定义和Python语句。模块让你能够有逻辑地组织你的 Python 代码段。 把相关的代码分配到一个模块里能让你的代码更好用,更易懂。 模块能定义函数,类和变量,模块里也能包含可执行的代码。
通过全局变量 __name__ 可以获取模块名
二 导入
1 搜索路径
-
当前目录
-
如果不在当前目录,Python 则搜索在 shell 变量 PYTHONPATH 下的每个目录。
-
如果都找不到,Python会察看默认路径。UNIX下,默认路径一般为/usr/local/lib/python/。
-
模块包每个__init__.py文件
模块搜索路径存储在 system 模块的 sys.path 变量中。变量里包含当前目录,PYTHONPATH和由安装过程决定的默认目录。
2 import
模块定义好后,我们可以使用 import 语句来引入模块
语法
import module1[, module2[,... moduleN]
示例:
# 导入模块
import support
# 现在可以调用模块里包含的函数了
support.print_func("Runoob")
# 获取模块名
if __name__ == "__main__":
import sys
fib(int(sys.argv[1]))
一个模块只会被导入一次,不管你执行了多少次import。这样可以防止导入模块被一遍又一遍地执行。
3 from…import
from 语句让你从模块中导入一个指定的部分内容(变量,方法,类)到当前命名空间中
语法
from modname import name1[, name2[, ... nameN]]
示例:
# 导入模块 fib 的 fibonacci 函数
from fib import fibonacci
# 把一个模块的所有内容全都导入到当前的命名空间,这种声明不该被过多地使用。
from math import *
4 reload
当一个模块被导入到一个脚本,模块顶层部分的代码只会被执行一次。如果你想重新执行模块里顶层部分的代码,可以用 reload() 函数。该函数会重新导入之前导入过的模块。
reload(module_name)
# 示例
from importlib import reload
from sound.formats import echo
reload(echo)
三 标准库
Python中有很多标准库,
有些模块直接被构建在解析器里,这些虽然不是一些语言内置的功能,但是他却能很高效的使用,甚至是系统级调用也没问题。
这些组件会根据不同的操作系统进行不同形式的配置,比如 winreg 这个模块就只会提供给 Windows 系统。
应该注意到这有一个特别的模块 sys ,它内置在每一个 Python 解析器中。变量 sys.ps1 和 sys.ps2 定义了主提示符和副提示符所对应的字符串:
1 dir()
该函数一个排好序的字符串列表,内容是一个模块里定义过的名字。
import fibo, sys
dir() # 当前模块
dir(fibo) # 指定模块 ['__name__', 'fib', 'fib2']
dir(sys) # ['__displayhook__', '__doc__', '__excepthook__', '__loader__', '__name__']
四 包
包是一种用“点式模块名”,模块命名空间的方法,与java与c#的包形式
Python (巨蟒)
只把含 __init__.py 文件的目录当成包
__init__.py 可以是一个空文件,该文件也可以执行包的初始化代码,或设置 __all__ 变量,详见下文。
示例 main.py
# 导入单个包 as 重命模块名
import sound.formats.echo as echo
echo.e("你好")
# 导入指定内容
from sound.effects.echo import e
__init__.py 文件
__all__ = ["echo", "surround"]
# 进行 import * 时只会导入echo,surround文件,如果不定义__all__则会把文件下所有模块导入
from sound.formats import *
echo.e("你好")