作为一名机器学习工程师, 我使用 Python 已经一年多了.
最近出于兴趣, 我也开始学习 C ++. 接触 C++ 后, 才意识到 Python 是多么容易和直观.
我对 Python 与其他语言的不同之处及其工作机制愈加好奇.
于是, 本文诞生. 本篇文章将尝试讨论 Python 的内部工作机制.
Python 最初是 Guido Van Rossum 在业余时开发的一个项目, 于 1991 年首次发布. 作为一门通用语言, Python 为 Netflix 和 Instagram 等许多公司提供了强大支持. 在一次采访中, Guido 将 Python 与 Java/Swift 等语言进行了比较, 他表示 Java/Swift 对于日常工作即是编程的软件开发人员是一个不错的选择, 而 Python 针对的目标用户是日常工作与软件开发无关的人, 他们编写代码主要是为了处理数据.
在阅读有关 Python 的文章时, 经常会遇到诸如 "编译型 vs 解释型","字节码 vs 机器码","动态类型 vs 静态类型","垃圾回收站" 等词语. 维基百科将 Python 描述为:
Python 是一种解释型的高级通用性编程语言, 具有动态类型和垃圾回收功能.
解释型语言
用 C / C ++ 编写程序时, 必须进行编译. 编译是将人类可理解的代码转换为机器可理解的代码即 "机器代码". 机器代码是 CPU 可直接执行指令的基本形式. 成功编译后, 代码生成一个可执行文件. 执行此文件, 代码中的操作将逐步运行.
尽管也需要编译这一步骤, 但在大多数情况下, Python 是一种解释型语言, 而非编译型语言. 首先将以. py 文件编写的 Python 代码编译为字节码(后文将详细讨论), 然后以. pyc 或. pyo 格式存储.
Python 将源代码转换为字节码, 而不像 C ++ 等转换为机器代码. 该字节码是可由解释器执行的低级指令集. Python 解释器在大多数 PC 中安装在 / usr/local/bin/python3.8 路径下. 字节码指令在虚拟机而非 CPU 上执行.
为什么选择解释型语言?
解释型语言具有独立于平台的一大优势. 只要 Python 字节码和虚拟机版本相同, Python 字节码就可以在任何平台 (Windows,MacOS 等) 上执行.
Python 的另一个优点是动态类型. 在 C ++ 等静态类型语言中, 必须先声明变量类型, 并在编译时检查所有差异(如添加字符串和整数). 但在像 Python 这样的强类型语言中, 检查变量类型和所执行操作的有效性由解释器来完成.
解释型语言的缺点
动态类型提供给代码很大的自由度, 但同时提高了代码的风险性, 有时会难以调试.
Python 经常被指责 "速度慢". 这种说法是相对的, 也存在很多争议, 但之所以 "慢" 是因为解释器需要做额外工作来将字节码指令转换成可以在机器上执行的指令形式. Stack Overflow 上的一个帖子对此的解释更易理解:
如果你能用自己的母语和别人交谈, 那通常要比口译员把你的语言翻译成其他语言让对方理解要快得多.
来源: http://developer.51cto.com/art/202002/610627.htm