1.操作系统怎么识别编程语言
计算机能识别二进制数,但是无法识别编程语言,比如你把 01000001100通过相关手段输入计算机中计算机就能识别其中的含义并且执行对应的命令,但是你输入 print('hello world')计算机就无法识别其含义,这就需要有个东西把print('hello world')类似的语言翻译成 0011000这种二进制语言,这个东西就是编译器或者解释器。
2. 编译器和解释器的区别
如上图,可以看到编译器是把源文件整个翻译成了可执行文件,最终运行,而解释器是一行行的解释源文件,这样解释可能有点生硬,我们拿编译型语言c语言和解释型语言python写两行代码来做个比较
c语言
#include "stdio.h"
int main() {
printf("hello");
printf(hello);
}
python
if __name__ == '__main__':
print('hello')
print(hello)
以上是c和python的两个程序,实现功能都是输入两个hello,而且很明显,第二个输出hello的语法都是错误的,我们运行下,看下结果
c语言运行结果
python运行结果
从结果上来看,两个程序都运行报错了,但两个运行错误又有本质的区别,python其实是一行运行正确,一行运行错误,它输出了第一行hello。而c是两行运行错误(整个程序运行错误),第一行语法正确的也没有成功运行 。
因为python是解释型语言,解释器会把一行代码解释执行后,再去解释执行下一行,也就是先把print('hello')解释执行,这行代码是没问题的,然后去解释执行下一行代码print(hello),这行代码报错。
而c是编译型语言,编译器会编译整个文件(两个输出语句),文件顺利编译完成后会运行,当然,这次因为printf(hello)语法错误编译失败了,还没有到运行这一步,所以没有任何输出。
3.python是解释型语言,那么pyc是什么呢?
相信很多人都有这个疑问,既然python是解释型语言,就是不需要像c那么编译成exe在win运行,那么pyc是什么呢?
首先,解释型和编译型只是一些人为了笼统的区分编程语言而提出的概念,很多语言并没有这么明显的区分,可能一个语言解释成编译型是合理的,解释成解释型也是合理的
3.1 什么时候会有pyc文件
当只有一个模块文件时运行,发现并没有生成pyc文件,那当我们新增一个文件,并且导入该模块运行
发现新建了一个文件夹,里面生成了对应的pyc文件
结论:
只有在导入模块时,被导入的模块会编译成pyc文件,这样就避免了第二次去一行行的解释,加快了运行速度,当然,会检测pyc文件和py文件的修改时间,如果修改了重新生成pyc文件,避免出现问题