模块 Module¶
一个 .py
文件就称之为一个模块 module
好处:
- 提高了代码的可维护性;
- 可以被其他地方应用;
- 可以避免命名冲突。
import¶
import加载的模块分为四个通用类别:
- 使用python编写的代码(
py文件
); - 已被编译为共享库或DLL的
C或C++扩展
; - 包好一组模块的
包
- 使用C编写并链接到python解释器的
内置模块
.
包 Package¶
模块的上一级称为包 package
- 包是一个文件夹,可以通过包来组织模块,避免冲突。
- 一个包里必须含有一个
__init__.py
__init__.py
可以是空文件,也可以有Python代码__init__.py
本身就算一个模块,它的模块名就是包名
- 包里面还可以有包
- 顶层包为 MyPackage
- 子包为 web
- 普通目录 dirc (因为它没有
__init__.py
文件) test.py
的模块名为MyPackage.web.test
utils.py
有两个,模块名分别为MyPackage.web.utils
和MyPackage.utils
自己创建模块时注意命名不要与系统模块冲突
要检查系统中是否存在该模块,可以在交互环境下执行 import abc
,若成功说明系统存在此模块。
使用模块¶
标准模块文件模板¶
#!/usr/bin/env python3
是向Unix / Linux / Mac 系统声明本文件是Python3文件# -*- coding: utf-8 -*-
表示本文件使用标准utf-8编码,虽然Python3之后默认支持中文,但为保稳妥还是写上"Here is the module documentation"
是模块文档注释,任何模块的第一个字符串都被视为模块的文档注释。可以通过模块名.__doc__
获得。__author__ = 'Boii'
是作者。可以通过模块名.__author__
获得。
标准模块文件模板也可以不写,并不影响。
导入、参数列表、name¶
import sys
引入了内置模块sys
args = sys.argv
,这里sys.argv
是参数列表,是一个 list,保存的是通过命令执行本文件的时候所带的参数
。但该 list的第一个元素永远是文件名。- 例如上面的文件名为
Hello.py
,则运行命令python Hello.py
后sys,argv为['Hello.py']
. - 如果执行的命令为
python Hello.py Boii
,则sys.argv为['Hello.py', 'Boii']
- 例如上面的文件名为
if __name__ == '__main__': test()
如果这个文件是独立运行的,则 if 为 True,如果这个文件是被导入的,则 if 为 False。
总结¶
一个 .py 文件就是一个模块 module
一个带有 __init__.py
的文件夹就是一个包 package