python模块、.pyc、python语言执行过程

模块
Python 模块(Module),是一个 Python 文件,以 .py 结尾,包含了 Python 对象定义和Python语句。 模块让你能够有逻辑地组织你的 Python 代码段。
把相关的代码分配到一个模块里能让你的代码更好用,更易懂。
模块能定义函数,类和变量,模块里也能包含可执行的代码。
例子
下例是个简单的模块 support.pysupport.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的一种持久化保存的 方式。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值