当前位置: 首页 > 科技观察

学了这么久,你知道Python是怎么工作的吗?

时间:2023-03-14 22:50:57 科技观察

作为一名机器学习工程师,我已经使用Python一年多了。最近也是出于兴趣开始学习C++。在接触了C++之后,我意识到Python是多么简单和直观。我越来越好奇Python与其他语言有何不同以及它是如何工作的。于是,这篇文章诞生了。本文将尝试讨论Python的内部工作原理。来源:PexelsPython最初是GuidoVanRossum在业余时间开发的一个项目,并于1991年首次发布。作为一种通用语言,Python为包括Netflix和Instagram在内的许多公司提供支持。在一次采访中,Guido将Python与Java/Swift等语言进行了比较。他表示,Java/Swift对于日常工作是编程的软件开发人员来说是一个不错的选择,而Python则针对日常工作和软件开发人员。与开发无关的人,他们编写代码主要是为了操纵数据。在阅读Python时,您经常会遇到诸如“编译vs解释”、“字节码vs机器码”、“动态vs静态类型”、“垃圾收集箱”等术语。维基百科将Python描述为:Pythonisaninterpreted,high级、通用编程语言,具有动态类型和垃圾收集功能。用解释性语言C/C++编写程序时,必须对其进行编译。编译是将人类可理解的代码转换为机器可理解的代码或“机器代码”。机器码是CPU可以直接执行的指令的基本形式。编译成功后,代码生成一个可执行文件。执行这个文件,代码中的操作会一步步运行。在大多数情况下,Python是一种解释型语言而不是编译型语言,尽管也需要编译。以.py文件编写的Python代码首先被编译成字节码(稍后详细讨论),然后以.pyc或.pyo格式存储。Python将源代码转换为字节码,而不是像C++等那样转换为机器码。该字节码是一组可以由解释器执行的低级指令。在大多数PC上,Python解释器安装在/usr/local/bin/python3.8中。字节码指令在虚拟机而不是CPU上执行。为什么是解释性语言?解释型语言具有独立于平台的巨大优势。Python字节码可以在任何平台(Windows、MacOS等)上执行,只要Python字节码和虚拟机版本相同即可。Python的另一个优点是动态类型。在C++等静态类型语言中,必须首先声明变量类型,并在编译时检查任何差异(如添加字符串和整数)。但是在像Python这样的强类型语言中,检查变量的类型和执行的操作的有效性是由解释器完成的。解释型语言的缺点动态类型为代码提供了极大的自由度,但同时也增加了代码的风险,有时难以调试。Python经常被指责为“慢”。这种说法是相对的,也有很多争议,但之所以“慢”,是因为解释器需要做额外的工作,将字节码指令转换成机器可以执行的指令形式。StackOverflow上的一篇文章更容易地解释了这一点:如果你能用你的母语与某人交谈,通常比口译员将你的语言翻译成另一种语言以供对方理解要快得多。资料来源:Pexels究竟什么是垃圾收集?在早期的编程语言中,内存分配主要是手动的。很多时候,当一个变量在程序的其他地方不再使用或引用时,需要手动将其从内存中清除。垃圾回收站取代人工,无需任何操作,自动释放空间。内存管理有两种方法:简化的方法是跟踪对象的引用数。当该数字降为0时,删除该对象。这种方法称为“引用计数”。在Python中无法禁用此功能。“生成垃圾收集”线程可以在一个对象引用自身或两个对象相互引用的情况下发挥作用。这是传统的引用计数无法解决的。什么是__pycache__?在个人项目或GitHub上,你可能经常会看到名为__pycache__的文件夹被自动创建。/folder-_pycache_-preprocess.cpython-36.pyc-preprocess.py可以看到,自动创建的文件和文件夹外的文件同名,都是_pycache_。.pyc扩展名表示该文件包含preprocess.py的字节码。CPython指示解释器的类型。CPython的意思是解释器是用C语言实现的。同样,JPython是用Java实现的Python解释器。来源:diyitui但是为什么要首先创建文件夹?因为它可以稍微提高Python程序的速度。另一种提高速度的方法是更改??Python代码,避免将其重新编译为字节码,从而节省时间。