Python模块与包(module and package)

Python模块与包(module and package)  

http://blog.163.com/stu_shl/blog/static/59937509201421084415807/

2014-03-10 08:44:15|  分类: Python |  标签:python  模块    package  module  |举报|字号 订阅

 
 
1.模块
一个模块是一个可以包含Python定义和可执行语句的文件,文件的名字就是模块名加上.py扩展名。在模块内部,全局变量__name__设置为模块的名字
模块中的可执行语句主要目的是用来初始化模块,只有第一次用import语句导入时才会被执行。
当模块当做一个脚本直接运行时也会执行其中的语句。
每个模块都有自己的私有符号表,所有定义在模块里面的函数把它当做全局符号表使用。
 
模块可以导入其他的模块。通常将import语句放在模块的开头,被导入的模块名字放在导入它的模块的符号表中。
from module import names 可以直接从模块中导入名字到符号表,但模块名字不会被导入。
from module import *     可以把模块中的所有名字全部导入,除了那些以下划线开头的名字符号。不建议使用,不清楚导入了什么符号,有可能覆盖自己定义的东西
 
内建函数dir()可以查看模块定义了什么名字(包括变量名,模块名,函数名等):dir(模块名),没有参数时返回所有当前定义的名字
 
把模块当做脚本执行和直接导入执行效果一样,只是__name__被设置为"__main__",可以在模块中用下面的判断来写出通用的模块
if __name__ == "__main__":
    main()
 
 
模块搜索路径
当导入一个模块时,解释器先在当前包中查找模块,若找不到,然后在内置的built-in模块中查找,找不到则按sys.path给定的路径找对应的模块文件(模块名.py)
sys.path的初始值来自于以下地方:
    包含脚本当前的路径,当前路径
    PYTHONPATH
    默认安装路径
sys.path初始化完成之后可以更改
 
编译过的Python文件: .pyc文件
    
 
built-in 模块
 
2.包
 
包(Packages)是用来组织模块的一个目录
为了让Python把这个目录当做包,目录中的__init__.py文件是必须要有的,这个文件可以直接是一个空文件,但也可以为包执行初始化语句或设置__all__变量。
 
可以从包中导入单独的模块。import PackageA.SubPackageA.ModuleA,使用时必须用全路径名
变种: from PackageA.SubPackageA import ModuleA, 可以直接使用模块名而不用加上包前缀。
也可以直接导入模块中的函数或变量:from PackageA.SubPackageA.ModuleA import functionA
 
import语句语法:
1. 当使用from package import item时,item可以是package的子模块或子包,或是其他的定义在包中的名字(比如一个函数、类或变量)
   首先检查item是否定义在包中,不过没找到,就认为item是一个模块并尝试加载它,失败时会抛出一个ImportError异常。
2. 当使用import item.subitem.subsubitem语法时,最后一个item之前的item必须是包,最后一个item可以是一个模块或包,但不能是类、函数和变量
 
 
3. from pacakge import *
   如果包的__init__.py定义了一个名为__all__的列表变量,它包含的模块名字的列表将作为被导入的模块列表。
   如果没有定义__all__, 这条语句不会导入所有的package的子模块,它只保证包package被导入,然后导入定义在包中的所有名字。
 
 
 
 
 
阅读(5661)评论(0)
 
posted @ 2018-01-19 10:40  sky20080101  阅读(162)  评论(0)    收藏  举报