`
icbm
  • 浏览: 58542 次
社区版块
存档分类
最新评论

Python中module和package

阅读更多
模块(module)
包(package)

模块的创建
创建一个可被重用的Python脚本文件,即创建了一个模块。模块名即为脚本的(无后缀)文件名。可用import <modname>导入模块。

模块的属性
__name__ 对于导入的模块,与模块名相同。对于直接执行的模块,为"__main__"。可以用来区分模块是导入,还是直接执行的。

直接执行模块
if __name__ == "__main__":
    import sys
    print (sys.argv[0])


模块中可以包含变量、类、函数等定义,也可以包含语句。
模块中的语句在模块被导入时,执行一次。多次导入同一个模块时,这些语句不会重复执行。

模块有自己的命名空间。可以用from <modname> import <name>的方式,将模块内的名字,导入当前命名空间。


模块的查找顺序
1、内建模块
2、sys.path变量:脚本当前路径;PYTHONPATH环境变量;依赖于安装的默认值

编译后的Python文件
导入模块后,会生成.pyc文件。对应的.py文件的修改时间戳会记录在.pyc文件中。如果对应的.py文件被修改,.pyc将被重新生成。
.pyc文件仅加快载入速度,不会加快执行速度。
可以仅有.pyc文件,而没有.py文件。此时将直接载入.pyc文件。
可以用 -O选项,生成优化的.pyo文件。目前优化仅剔除断言。
可以用-OO选项,生成最优化的.pyo文件。此时会剔除模块的__doc__属性。使用时需确认程序中不会用到__doc__属性。
可以直接执行.pyc文件,或用优化选项执行.pyo文件。

包(package)
可以将多个模块放在一个目录中,创建一个包。该目录中必须包含一个__init__.py文件,标识该目录为包。

导入时,除了最后一个部分,前面的部分必须是包,最后一个部份可以是模块或包,不能是变量、函数及类。

包的属性
__all__ 该属性指定用 from <pkgname> import *时,导入的子模块、子包的名称。

包内的子模块相互导入时,优先导入同一个包中的模块。
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics