说学python已经好久了,这两天终于看了下。最开始还是别人推荐的简明python教程:chm版本下载,在线版本,这个版本是2.x版本滴了,机子上装了3.2的,难怪自己开始想打印hello world都不行。因为教程里说的是,直接print ‘hello world’,结果提示语法错误。后来才知道,print在3.x版本里面已经是一个函数,应该用print(‘hello world!’)这样才可以,我就说怎么连hello world都不行。该教程的英文版本滴可以参考这里。
然后稍微看了下语法,试着写写函数之类的。就有以下判断素数的代码:也试着用pdb调试下(只是玩玩而已,知道有这回事,真正做事情的时候应该还是用IDE吧)
import math |
然后,还记得教程中有说自己写模块。于是就另外写另一个模块,练习输入输出,让用户手动输入数字,再进行判断。
# coding=GBK #加上这句支持中文 |
运行结果如下
突然发现,跟codes同目录下居然有个__pycache__的目录,下于isPrime.cpython-32.pyc这个文件。后来网上查了查,才大致弄明白了。
__pycache__这个目录跟我第一印象差不多,是一个缓存文件夹,当import一个文件时,python虚拟机会将import的模块编译成字节码文件,跟java类似吧。虽说python是一个解释性语言,但为了提高效率也有编译这一说。编译产生的pyc文件也可以直接运行,肯定是下次再import时,虚拟机会自动去cache这个目录去找,找到了就直接用(应该也有一个检测文件签名的机制,不然怎么知道是不是最新的),找不到再重新编译,这样就能提高解释效率了,用UE能打开pyc文件,可以看到pyc 是一种二进制文件,是由py文件经过编译后,应该就跟java中的class文件一个道理,一种byte code,py文件变成pyc文件后,加载的速度有所提高。说是pyc是一种跨平台的字节码,是由python的虚拟机来执行的,又跟JVM差不多。pyc的内容,是跟python的版本相关的,不同版本编译后的pyc文件是不同的。
扩展下,pyc文件可以由内置的类库来产生,就是用 py_compile 模块。就用这个来手动编译单个文件或者多个文件。不用等到import才被动编译了。
详细的pyc文件解析可以参考这里:Pyc文件解析
参考资料:
python的pyc和pyo文件:http://gmingzhe.blog.51cto.com/810664/163444
Python 中的pyc文件的用途:http://www.cppblog.com/lauer3912/archive/2011/08/12/153233.aspx