哈嘍大家好,我是咸魚
當(dāng)我們說 Python 時(shí),通常指的是官方實(shí)現(xiàn)的 CPython
但還有很多比如 Pypy、Jython、MicroPython、Brython、RustPython 等 “python”
許多小伙伴看到這些帶 “python” 的概念可能一頭霧水,心想這跟我平時(shí)接觸到的 python 有什么區(qū)別嗎?這些到底是什么
那么今天這篇文章將跟大家介紹相關(guān)的概念
參考鏈接:
What's the deal with CPython, Pypy, MicroPython, Jython...? (bitecode.dev)
為什么會有這么多的 “python”
在開始這篇文章之前,我們首先需要了解一個(gè)東西——python 是什么?
python 實(shí)際上是一個(gè)語言規(guī)范,這個(gè)規(guī)范定義了 Python 這門語言應(yīng)該具備哪些語言要素,應(yīng)當(dāng)能完成什么樣的任務(wù)
Python 語言規(guī)范可以用不同的方式實(shí)現(xiàn),可以用 C 實(shí)現(xiàn),也可以用 C++、Java、C#、JavaScript,甚至使用 Python 自己實(shí)現(xiàn)
python 最初是由龜哥(Guido van Rossum)用 C 編寫的(CPython)
在 python 大獲成功之后,許多其他的項(xiàng)目開始用其他的編程語言或者不同的目標(biāo)去重新編寫 python
那么這些項(xiàng)目中的每一個(gè) python 實(shí)現(xiàn)都需要一個(gè)名字去區(qū)別于最初的那個(gè) python(龜哥寫的那個(gè))
所以這就是 Pypy、MicroPython、Iron Python、Jython 和 Pyston 等豐富多彩的名字出現(xiàn)的原因
各種 "python" 介紹
CPython
當(dāng)我們在討論 python 的時(shí)候,99% 的情況下指的是 CPython,CPython 指的是用 C 編寫的 pyhton 實(shí)現(xiàn)
CPython 是標(biāo)準(zhǔn) python,可以將 Python 源碼編譯成 CPython 字節(jié)碼,由虛擬機(jī)解釋執(zhí)行這些字節(jié)碼
一般情況下,CPython 是最常用的 python 實(shí)現(xiàn),大多數(shù)開發(fā)人員基本不會使用到 CPython 之外的 python 實(shí)現(xiàn),甚至都不會去討論
Pypy
Pypy 是最著名的 CPython 替代品,它是用 python 編寫的(你沒聽錯(cuò),用 python 編寫的 python 實(shí)現(xiàn))
實(shí)際上 Pypy 是由 RPython 實(shí)現(xiàn)的,RPython 是 Python 的一個(gè)子集
Pypy 使用即時(shí)編譯(JIT)技術(shù),可以在運(yùn)行時(shí)將 Python 代碼動態(tài)地編譯成機(jī)器碼,從而提供更高的執(zhí)行速度
雖然 Pypy 執(zhí)行速度要比 CPython 快,但是它的啟動速度要比 CPython 慢,如果運(yùn)行的時(shí)間足夠長的話,就會變得越來越快
這使得它對于長時(shí)間運(yùn)行的進(jìn)程特別有用,例如守護(hù)進(jìn)程、任務(wù)隊(duì)列和web服務(wù)器
還有一個(gè)缺點(diǎn)就是 Pypy 與許多使用 C 編寫的 Python 拓展庫不兼容
雖然 Pypy 提供了一些與 CPython C API 兼容的接口,但并不能保證所有的 C 拓展都能無縫運(yùn)行
Stackless Python
Stackless Python 是一種 Python 的變體,它是在 CPython 的基礎(chǔ)上進(jìn)行擴(kuò)展和改進(jìn)的版本
與傳統(tǒng)的 CPython 相比,Stackless Python 提供了一些額外的特性,其中最重要的是支持協(xié)程(coroutine)和微線程(microthreads)
協(xié)程是一種輕量級的線程,它允許在同一個(gè)線程內(nèi)的多個(gè)協(xié)程之間進(jìn)行切換,從而實(shí)現(xiàn)并發(fā)執(zhí)行
Stackless Python 的協(xié)程實(shí)現(xiàn)基于任務(wù)切換的概念,可以方便地編寫異步、非阻塞的代碼,提高程序的并發(fā)性和響應(yīng)性
微線程是 Stackless Python 中的另一個(gè)概念,它是一種更輕量級的線程單位,可以在一個(gè)進(jìn)程內(nèi)并發(fā)地執(zhí)行多個(gè)微線程
微線程與操作系統(tǒng)線程的切換開銷較小,可以更高效地處理大量的并發(fā)任務(wù)
Stackless Python 并不是 Python 的官方版本,它是由 Christian Tismer 和其他貢獻(xiàn)者開發(fā)和維護(hù)的一個(gè)項(xiàng)目
Stackless Python 的一個(gè)簡單應(yīng)用:
import stackless
# 定義一個(gè)協(xié)程函數(shù)
def task(name):
print("Running task:", name)
# 模擬任務(wù)執(zhí)行
stackless.sleep(1)
print("Task", name, "completed")
# 創(chuàng)建協(xié)程
task1 = stackless.tasklet(task)("Task 1")
task2 = stackless.tasklet(task)("Task 2")
# 運(yùn)行協(xié)程調(diào)度器
stackless.run()
Jython
Jython(Java Python 的縮寫)由 Java 編寫,運(yùn)行在 Java 虛擬機(jī)上( Java Virtual Machine,JVM)
它允許開發(fā)人員使用 Python 語言編寫和執(zhí)行 Java 應(yīng)用程序,可以在Jython中直接訪問Java類和方法
它提供了對 Java 類和庫的無縫集成,使得開發(fā)人員可以利用 Java 平臺的功能和生態(tài)系統(tǒng)
Jython 廣泛應(yīng)用于 Java 開發(fā)中,尤其是需要結(jié)合 Python 腳本和 Java 代碼的場景
jython 的一個(gè)簡單應(yīng)用:
# 導(dǎo)入Java類
from java.util import ArrayList
# 創(chuàng)建一個(gè)Java ArrayList對象
list = ArrayList()
# 向列表中添加元素
list.add("Hello")
list.add("World")
# 使用Python的for循環(huán)遍歷列表
for item in list:
print(item)
IronPython
IronPython 與 Jython 類似,它是 .NET 框架的 python 實(shí)現(xiàn)
它使用了微軟開發(fā)的動態(tài)語言運(yùn)行時(shí)(DLR)和公共語言運(yùn)行時(shí)(CLR),能夠與.NET框架無縫集成
開發(fā)人員可以在 .NET 平臺上編寫和執(zhí)行 Python 代碼,利用 .NET 框架的功能和資源
IronPython 的一個(gè)簡單應(yīng)用:
import clr
clr.AddReference("System.Windows.Forms")
clr.AddReference("System.Drawing")
from System.Windows.Forms import Application, Form, Button
from System.Drawing import Point
# 創(chuàng)建窗體類
class MyForm(Form):
def __init__(self):
self.Text = "IronPython Form Example"
self.button = Button()
self.button.Text = "Click Me"
self.button.Location = Point(50, 50)
self.button.Click += self.button_Click
self.Controls.Add(self.button)
def button_Click(self, sender, event):
self.button.Text = "Clicked!"
# 創(chuàng)建應(yīng)用程序并運(yùn)行窗體
Application.Run(MyForm())
MicroPython
根據(jù)字面意思可以得知—— MicroPython 是一種精簡版的 python 實(shí)現(xiàn)
它只包含了 python 標(biāo)準(zhǔn)庫中的一小部分并經(jīng)過優(yōu)化,以適應(yīng)資源受限的環(huán)境,專為嵌入式系統(tǒng)和物聯(lián)網(wǎng)設(shè)備而設(shè)計(jì)
MicroPython具有以下特點(diǎn):
- 小巧
- 支持硬件交互
- 垃圾回收和內(nèi)存管理
- 交互式開發(fā)
- 跨平臺支持
總結(jié)一下
-
Python 實(shí)際上是一個(gè)語言規(guī)范,可以用不同的方式實(shí)現(xiàn)
-
為了能夠?qū)崿F(xiàn)在特定的應(yīng)用場景中具有不同的優(yōu)勢和用途,開發(fā)人員用其他語言設(shè)計(jì)了不同的 python 實(shí)現(xiàn)
-
CPython 是最常用的 Python 實(shí)現(xiàn),它是官方用 C 編寫的 python 實(shí)現(xiàn)文章來源:http://www.zghlxwxcb.cn/news/detail-526268.html
-
除此之外還有像 jython、Pypy、Iron Python、Stackless Python 等文章來源地址http://www.zghlxwxcb.cn/news/detail-526268.html
到了這里,關(guān)于CPython, Pypy, MicroPython...還在傻傻分不清楚?的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!