用户工具



模块


  • 一个模块就是一个文件
  • 模块有自己的命名空间
  • 模块只会被import一次(再次倒入要用reload函数,常用于修改配置文件)
  • 查看模块内容 dir(mod_name)
  • 模块查找路径print sys.path
  • 要使用某个模块时必须import一次,
    • 假如a.py要使用time模块,必须执行import time。即使包含a.py的main.py已经import time了。每次import只会在当前文件生效,不会传递
    • 但是python解释器会做一次优化,python只执行一次time模块,然后只是把time模块的“使用权”分给其他文件罢了

import流程

  1. 找到模块位置
  2. 编译成位码(需要时)
  3. 执行模块中的代码来创建其所定义的对象

模块只能访问自己的变量

mod1.py

v1='from mod1'
def f1():
    global v1
    print v1

main.py

import mod1
v1='from main'
mod1.v1()
结果:
from mod1

import 和 impor..from

v1='from main'
import  mod1
print v1
print mod1.v1

结果:
from main 
from mod1 

import 会把模块以对象的形式引用到当前作用域

v1='hello'
from  mod1 import v1
print v1

结果:
from mod1 #import的v1覆盖了当前的v1

把变量名复制到当前作用域(容易引起命名冲突,不建议使用)


import 非当前目录下的模块

假如我要import mod2/mod2.py

from mod2 import mod2  #多层目录用 . 链接
print mod2.v2

mod2目录下一定要有一个init.py文件(用于标识这个目录是python模块目录,内容可为空),否则无法引入mod2目录下的模块。python首次倒入某个目录时,会自动执行目录下的init.py文件,所以init.py文件一般用于初始化。


模块属性

一个文件(模块)有若干内置属性,这些属性描述了模块的特征。

  * __name__
    * 模块的名字
    * 如果是以顶层文件执行,则自动复制为“__main__”
  * __all__ 
    * help(mod_name)的时候会展示__all__中的内容

模块高级功能

  • import string as a(为模块取别名)
  • 动态修改python搜索模块的路径,修改sys.path属性即可
  • 导入模块(模块是一个变量)
    mod_name="string"
    exec("import", mod_name)