1、解释型语言和编译型语言的区别
(1)编译型语言:在程序执行之前,先通过编译器对程序把程序转变成机器语言。运行时不需要翻译。
(2)解释型语言:没有编译的过程,而是在程序运行时,通过解释器对程序逐行解释,然后直接运行。
(3)编译型语言与解释型语言的优缺点:编译型语言在程序运行之前就已经对程序做出了“翻译”,所以在运行时就少掉了“翻译”的过程,所以效率比较高。
(4)先编译后解释的语言:Java首先是通过编译器编译成字节码文件,然后在运行时通过解释器给解释成机器文件。Java等基于虚拟机的语言的存在,我们又不能把语言纯粹地分成解释型和编译型这两种。Python也是一门基于虚拟机的语言。当我们在命令行中输入python hello.py时,其实是激活了Python的“解释器”,告诉“解释器”:你要开始工作了。可是在“解释”之前,其实执行的第一项工作和Java一样,编译。
2、Python的运行过程
(1)PyCodeObject是Python编译器真正编译结果。当python程序运行时,编译结果保存在位于内存中的PyCodeObject中,当Python程序运行结束,Python解释器则将PyCodeObject写回到pyc文件中。当python程序二次运行,程序先在硬盘中寻找pyc,如找到,则直接载入,否则就重复上面的过程。所以,我们可以说pyc其实是PyCodeObject的一种持久化保存方式。
3、编译pyc:
方式一,运行代码
#编译生成 单个pyc:
import py_compile
py_compile.compile("test.py",“test.pyc”)
'''
第二个参数指编译成的文件名,不写时,
默认在当前目录创建一个__pycache__文件夹并生成带文件名带Python版本的pyc,
详细用法自己help(),或者直接打开py_compile.py,compileall.py文件来看。
'''
#编译生成 多个pyc:
import compileall
compileall.compile_dir("存放py的目录")
方式二,运行命令
python -m py_compile test.py
python -O -m py_compile test.py
-O 优化成字节码
-m 表示把后面的模块当成脚本运行
-OO 表示优化的同时删除文档字符串
4、反编译pyc:
在线:https://tool.lu/pyc/?utm_source=qdan.me
本地:uncompyle2(python2.X)
5、本文是拼凑别人文章而成,如发现侵权,请及时告诉本文作者我,立即删除
6、其他详解请看别人的解释https://blog.csdn.net/chroming/article/details/52083387