模块 Python 模块(Module),是一个 Python 文件,以 .py 结尾,包含了 Python 对象定义和Python语句。 模块让你能够有逻辑地组织你的 Python 代码段。 把相关的代码分配到一个模块里能让你的代码更好用,更易懂。 模块能定义函数,类和变量,模块里也能包含可执行的代码。 例子 下例是个简单的模块 support.py: support.py 模块:

#Author:Anliu
def print_func( par ):   
	print("Hello:", par)    、
	return

**1 、import 语句 ** 模块的引入 模块定义好后,我们可以使用 import 语句来引入模块,语法如下:

import module1[, module2[,... moduleN]]

比如要引用模块 math,就可以在文件开始的地方用 import math 来引入。在调用 math 模块中的 函数时,必须这样引用:

模块名.函数名

当解释器遇到 import 语句,如果模块在当前的搜索路径就会被导入。

搜索路径是一个解释器会先进行搜索的所有目录的列表。如想要导入模块 support.py,需要把命令放在 脚本的顶端:

#Author:Anliu # 导入模块
import support
# 现在可以调用模块里包含的函数了
support.print_func("Runoob")

一个模块只会被导入一次,不管你执行了多少次import。这样可以防止导入模块被一遍又一遍地执行。 **2 、from…import 语句 ** Python 的 from 语句让你从模块中导入一个指定的部分到当前命名空间中。语法如下: 例如,要导入模块 fib 的 fibonacci 函数,使用如下语句:

from modname import name1[, name2[, ... nameN]]

这个声明不会把整个 fib 模块导入到当前的命名空间中,它只会将 fib 里的 fibonacci 单个引入到执行这 个声明的模块的全局符号表。3 、from…import 语句* 把一个模块的所有内容全都导入到当前的命名空间也是可行的,只需使用如下声明:

from modname import *

这提供了一个简单的方法来导入一个模块中的所有项目。然而这种声明不该被过多地使用。 例如我们想一次性引入 math 模块中所有的东西,语句如下:

from math import *

4、 搜索路径 当你导入一个模块,Python 解析器对模块位置的搜索顺序是: 1、当前目录 2、如果不在当前目录,Python 则搜索在 shell 变量 PYTHONPATH 下的每个目录。 3、如果都找不到,Python会察看默认路径。UNIX下,默认路径一般为/usr/local/lib/python/。

模块搜索路径存储在 system 模块的 sys.path 变量中。变量里包含当前目录,PYTHONPATH和由安装 过程决定的默认目录。

PYTHONPATH 变量 作为环境变量,PYTHONPATH 由装在一个列表里的许多目录组成。PYTHONPATH 的语法和 shell 变量 PATH 的一样。 在 Windows 系统,典型的 PYTHONPATH 如下:

set PYTHONPATH=c:\python27\lib;

在 UNIX 系统,典型的 PYTHONPATH 如下:

set PYTHONPATH=/usr/local/lib/python

**5 、模块例举 ** Python的强大之处就是在于他有非常丰富和强大的标准库和第三方库,几乎你想实现的任何功能都有相 应的Python库支持。 模块加载时,回根据环境路径去查找模块。 默认的第三方库在 E:\Python3\Lib\site-packages 现在简单介绍以下两个模块:

#Author:Anliu 
import sys
 print(sys.argv)

os.system不保存打印结果

#Author:Anliu
import os cmd_res = os.system("dir") 
print("----->",cmd_res)

os.popen将打印结果保存

#Author:Anliu 
import os 
#cmd_res = os.system("dir")
#print("----->",cmd_res) 
cmd_res = os.popen("dir").read() 
print("------->",cmd_res)

模块的导入,首先当前目录下查找文件,查找不到再到系统定义的路径下去查找.

OS模块可以再我们的标准库中找到,而sys模块是在标准库中找不到的,因为python中sys模块是写到 python解释器里面的。所以我们说模块不仅仅是用户定义或者标准库第三方库提供,python解释器本 身也提供。.pyc pyc设什么东西? 我们知道python是一门解释性语言,但是在执行之后,会产生一个.pyc的文件。 如果是解释性语言,那么生成的.pyc是干什么的呢?c应该是compiled的缩写才对。解释型语言和编译型语言 计算机是不能够识别高级语言的,所以当我们运行一个高级语言编程的时候,就需要一个“翻译机”来从 事把高级语言变成计算机能读懂的机器语言。这个过程分为两类:一种是编译,一种是解释。

编译型语言在程序执行之前,先会通过编译器对程序执行一个编译的过程,把程序转换为机器语言。运 行时就不需要翻译,而直接执行就可以了。典型的例子就是C语言。

解释型语言就是没有这个编译的过程,而是在程序运行的时候,通过编译器对程序做出解释,然后直接 运行,典型的例子就是ruby。 由此可知,编译型语言在程序执行之前就已经对程序做出了翻译,所以在运行时就少掉了“翻译”的过 程,所以效率比较高。但是我们不能一概而论,一些解释型语言也可以通过解释器的优化来在对程序做 出翻译时对整个程序做出优化,从而在效率上超过编译型语言。

此外,随着Java基于虚拟机语言的兴起,我们又不能把语言纯粹的分为解释型和编译型两种. 用JAVA举个例子,Java首先是通过编译器编译成字节码文件,然后在运行时通过解释器给解释成机器文 件,所以Java是一个先编译后解析的语言。Python到底是什么 其实Python和Java/C#一样,也是一种基于虚拟机的语言,我们先来从表面上简单的解释一下python程 序的运行过程: 当我们在命令行中输入“Python hello.py”的时候,其实是激活了Python的解释器,告诉解释器,你要开 始工作了。 可以在解释之前,其实执行的第一项工作和Java一样,是编译。 只是我们在使用Eclipse之类的IDE时,将这两部给融合成一步了而已。其实,Python也一样当我们执行 Python hello.py时,他也一样执行了这么一个过程,所以我们应该这样来描述Python: Python是一门县 编译后解释的语言。

简述Python的执行过程: 在所这个问题之前,我们来说两个概念,PyCodeObject和pyc文件。 我们在硬件上看到Pyc自然不必多说,而实际PyCodeObject则是Python编译器真正真正编译成的结果。 当Python程序运行时,编译的结果则是保存在位于内存中的PyCodeObject中,当Python程序运行结束 时,Python解释器则将PyCodeObject写回到pyc文件中。 当Python程序第二次运行时,首先程序会在硬盘中寻找Pyc文件,如果找到,则直接载入,否则就重新 上面的过程。 所以我们应该来定位PyCodeObject和pyc文件,我们说pyc文件就是PyCodeObject的一种持久化保存的 方式。