模块
导入 模块:
使用import函数
如:
import module1
import module2
:
import moduleN
也可以在一行内导入多个模块, 像这样
import module1[, module2[,... moduleN]]
但是这样的代码可读性不如多行的导入语句。 而且在性能上和生成 Python 字节代码时这两种
做法没有什么不同。 所以一般情况下, 我们使用第一种格式。
如果在一个模块的顶层导入, 那么它的作用域就是全局的; 如果在函数中导入, 那么它的
作用域是局部的
如果模块是被第一次导入, 它将被加载并执行。
你可以在你的模块里导入指定的模块属性。 也就是把指定名称导入到当前作用域。 使用
from-import 语句可以实现我们的目的, 它的语法是:
from module import name1[, name2[,... nameN]]模块
如果自己不想使用导入的模块的名字,可使用as代替它
如:import TKinter as TK 这就表示使用了TK来代替了TKinter, from cgi import FieldStorage as form这一句是表示用form代替FieldStorage
从一个模块导入许多属性时,import 行会越来越长, 直到自动换行, 而且需要一个 \ 。
如
from Tkinter import Tk, Frame, Button, Entry, Canvas, \
Text, LEFT, DISABLED, NORMAL, RIDGE, END
把指定模块的所有名称导入到当前名称空间里:如:from module import *
在实践中, 我们认为 "from module import *" 不是良好的编程风格, 因为它"污染"当前名称
空间, 而且很可能覆盖当前名称空间中现有的名字; 但如果某个模块有很多要经常访问的变量或者
模块的名字很长, 这也不失为一个方便的好办法。
我们只在两种场合下建议使用这样的方法, 一个场合是:目标模块中的属性非常多, 反复键入
模块名很不方便, 例如 Tkinter (Python/Tk) 和 NumPy (Numeric Python) 模块, 可能还有
socket 模块。另一个场合是在交互解释器下, 因为这样可以减少输入次数。
名称空间是名称到对象的映射,改变一个名字的绑定叫做重新绑定,删除一个名字叫做解除绑定,
在执行期间有两个或三个活动的名称空间。 这三个名称空间分别是
局部名称空间, 全局名称空间和内建名称空间, 但局部名称空间在执行期间是不断变化的, 所以我
们说"两个或三个"。
Python 解释器首先加载内建名称空间。 它由 __builtins__ 模块中的名字构成。 随后加载执
行模块的全局名称空间, 它会在模块开始执行后变为活动名称空间
__builtins__ 模块包含内建名称空间中内建名字的集合,__builtin__ 模块, 该模块包含内建函数, 异常以及其他属性。
在标准 Python 执行环境下,
__builtins__ 包含 __builtin__ 的所有名字。
确定作用域的规则是如何联系到名称空间的呢? 它所要做的就是名称查询. 访问一个属性
时, 解释器必须在三个名称空间中的一个找到它。 首先从局部名称空间开始, 如果没有找到, 解释
器将继续查找全局名称空间. 如果这也失败了, 它将在内建名称空间里查找。 如果最后的尝试也失
败了,将返回一个错误报告
使用内置函数_import_()也可以导入模块 如:
sys模块的sys.path属性返回一个路径列表,使用import语句导入模块时,系统自动从该列表的路径中搜索模块,如果没有找到,则程序报错,
其中第一个 ' '', '表示当前目录,最后一个C:\\....用于扩展模块,建议自定义模块时放在这两个位置,程序中也可以直接修改sys.path列表,以添加模块搜索路径,如:
import sys
sys.path.append('c:\\python\file')
dir()内置函数: 模块中定义的成员,包括变量、函数和类可以通过内置函数dir()查询,也可以通过help()函数查询。dir()函数的基本形式如下:
dir(): 不带参数,列举当前模块的所有成员,就是列举已导入的模块的所有成员。
dir(模块名):列举指定的模块的所有成员。
dir(类/对象):列举指定类的所有成员。
包的概念:python模块是.py的文件,而包则是文件夹。只要文件夹中包含一个特殊的文件:_init_.py,则python解释器将该文件夹作为包,其中的模块文件(.py文件)则属于包中的模块
特殊文件_init_.py可以为空,也可以包含属于包的代码,当导入包或该包中的模块时,执行_init_.py,包可以包含子包,没有层次限制,如:
package1
_init_.py
subpackage1
_init_.py
modulel.py
subpackage2
_init_.py
modulel.py
模块的名称:每一个模块都有一个名称,通过特殊变量_name_可以获取模块的名称
当一个模块被用户单独运行时,其_name_的值为‘_main_’,
按字节编译的.pyc文件:导入模块时,python解释器为加快程序的启动速度,会在于模块文件同一目录下生成.pyc文件,.pyc文件是经过编译后的字节码,是在导入模块时python解释器自动生成的,无需手动编译,这样下次导入时,如果模块源代码.py文件没有修改(通过比较两者的时间戳),则直接导入.pyc文件,从而提高程序效率
包的导入和使用格式:
import [包名1.[包名2. ...]].模块名 #导入包中模块
[包名1.[包名2. ...]].模块名.函数名 #使用全限定名称调用模块中的成员
如:
import os.path
os.path.curdir
也可以使用from...import语句直接导入包中模块的成员,格式:
from[包名1.[包名2. ...]].模块名 import 成员名 #导入模块中的具体成员
如果是导入一个包中的所有模块时可以使用 from 包名 import *