[Python 学习笔记] 10: Module



  Python Module 更像 Object Pascal Unit和 C# 那种纯粹作为编译器名称识别符区别Module 本身就是种类型

>>> import types
>>> types.ModuleType
<type 'module'>
>>> type(types)
<type 'module'>


  我们可以在 Module 中定义变量、思路方法、类以及其他执行代码

i = 15
def test: pass
 Class1: pass
pr "Hello, World"


  ---------------------

  通过 __name__ 可以判断当前 module 是被 import 还是 execute

 __name__  "____":
 pr "Execute"
:
 pr "Import"


  ---------------------

  可以使用 dir 思路方法查看 module 成员

>>> import sys
>>> dir(sys)
...
>>> dir
['Class1', '__builtins__', '__doc__', '__name__', 'i', 'sys', 'test']


  ---------------------

  作为引入机制我们可以用两种思路方法来导入其他 module 成员

>>> import sys
>>> sys.version
'2.5 (r25:51908, Sep 19 2006, 09:52:17) [MSC v.1310 32 bit (Intel)]'
>>> from sys import version
>>> version
'2.5 (r25:51908, Sep 19 2006, 09:52:17) [MSC v.1310 32 bit (Intel)]'
>>> from sys import *
>>> winver
'2.5'


  除了使用 import 关键字以外我们还可以使用内建 __import__ 来导入 module两者区别是import 后面跟必须是个类型(type)而__import__ 参数是这个串可能来自配置文件也可能是某个表达式计算结果这显然为我们提供了更大灵活性

>>> m1 = __import__("sys")
>>> type(m1)
<type 'module'>
>>> m1.winver
'2.5'


  使用 import 导入 module 时Python 会将要导入 module 编译成字节码这种 2进制文件(.pyc)虽然没有提高执行速度但能加快装载速度我们还可以相关思路方法来完成编译行为

>>> import py_compile
>>> py_compile.compile("D:\\\\My Documents\\Python\\test.py") # 编译单个 .py 文件
>>> import compileall
>>> compileall.compile_dir("D:\\\\My Documents\\Python") # 编译指定目录下所有 .py 文件
Listing D:\\My Documents\Python ...
Compiling D:\\My Documents\Python\test2.py ...
Compiling D:\\My Documents\Python\test3.py ...
1


  ---------------------

  Python 通过 PYTHONPATH 环境变量来查找 module我们可以使用 sys.path 来查看或添加新路径

>>> sys.path
['D://My Documents/Python', ...]
>>> sys.path.append("d:\\\\My Documents");
>>> sys.path
['D://My Documents/Python', 'd://My Documents', ...]


  Package

  我们可以将多个 module 组合成个 package

  思路方法很简单:

  1. 在 Python\Lib 或者其他可以被搜索到路径下创建个子文件夹文件夹名就是包名称

  2. 将所有需要加入 module 放到该子文件夹中

  3. 创建个包含代码或为空 __init__.py 文件在第次 import 该包时该文件会被自动执行

  在 import 该包时候需要添加包名称前缀

>>> import mypackage
>>> import mypackage.module1
>>> from mypackage import *
>>> from mypackage.module1 import *


Tags: 

延伸阅读

最新评论

发表评论