哈嘍大家好,我是咸魚
當我們說 Python 時,通常指的是官方實作的 CPython
但還有很多比如 Pypy、Jython、MicroPython、Brython、RustPython 等 “python”
許多小伙伴看到這些帶 “python” 的概念可能一頭霧水,心想這跟我平時接觸到的 python 有什么區別嗎?這些到底是什么
那么今天這篇文章將跟大家介紹相關的概念
參考鏈接:
What's the deal with CPython, Pypy, MicroPython, Jython...? (bitecode.dev)
為什么會有這么多的 “python”
在開始這篇文章之前,我們首先需要了解一個東西——python 是什么?
python 實際上是一個語言規范,這個規范定義了 Python 這門語言應該具備哪些語言要素,應當能完成什么樣的任務
Python 語言規范可以用不同的方式實作,可以用 C 實作,也可以用 C++、Java、C#、JavaScript,甚至使用 Python 自己實作
python 最初是由龜哥(Guido van Rossum)用 C 撰寫的(CPython)
在 python 大獲成功之后,許多其他的專案開始用其他的編程語言或者不同的目標去重新撰寫 python
那么這些專案中的每一個 python 實作都需要一個名字去區別于最初的那個 python(龜哥寫的那個)
所以這就是 Pypy、MicroPython、Iron Python、Jython 和 Pyston 等豐富多彩的名字出現的原因
各種 "python" 介紹
CPython
當我們在討論 python 的時候,99% 的情況下指的是 CPython,CPython 指的是用 C 撰寫的 pyhton 實作
CPython 是標準 python,可以將 Python 原始碼編譯成 CPython 位元組碼,由虛擬機解釋執行這些位元組碼
一般情況下,CPython 是最常用的 python 實作,大多數開發人員基本不會使用到 CPython 之外的 python 實作,甚至都不會去討論
Pypy
Pypy 是最著名的 CPython 替代品,它是用 python 撰寫的(你沒聽錯,用 python 撰寫的 python 實作)
實際上 Pypy 是由 RPython 實作的,RPython 是 Python 的一個子集
Pypy 使用即時編譯(JIT)技術,可以在運行時將 Python 代碼動態地編譯成機器碼,從而提供更高的執行速度
雖然 Pypy 執行速度要比 CPython 快,但是它的啟動速度要比 CPython 慢,如果運行的時間足夠長的話,就會變得越來越快
這使得它對于長時間運行的行程特別有用,例如守護行程、任務佇列和web服務器
還有一個缺點就是 Pypy 與許多使用 C 撰寫的 Python 拓展庫不兼容
雖然 Pypy 提供了一些與 CPython C API 兼容的介面,但并不能保證所有的 C 拓展都能無縫運行
Stackless Python
Stackless Python 是一種 Python 的變體,它是在 CPython 的基礎上進行擴展和改進的版本
與傳統的 CPython 相比,Stackless Python 提供了一些額外的特性,其中最重要的是支持協程(coroutine)和微執行緒(microthreads)
協程是一種輕量級的執行緒,它允許在同一個執行緒內的多個協程之間進行切換,從而實作并發執行
Stackless Python 的協程實作基于任務切換的概念,可以方便地撰寫異步、非阻塞的代碼,提高程式的并發性和回應性
微執行緒是 Stackless Python 中的另一個概念,它是一種更輕量級的執行緒單位,可以在一個行程內并發地執行多個微執行緒
微執行緒與作業系統執行緒的切換開銷較小,可以更高效地處理大量的并發任務
Stackless Python 并不是 Python 的官方版本,它是由 Christian Tismer 和其他貢獻者開發和維護的一個專案
Stackless Python 的一個簡單應用:
import stackless
# 定義一個協程函式
def task(name):
print("Running task:", name)
# 模擬任務執行
stackless.sleep(1)
print("Task", name, "completed")
# 創建協程
task1 = stackless.tasklet(task)("Task 1")
task2 = stackless.tasklet(task)("Task 2")
# 運行協程調度器
stackless.run()
Jython
Jython(Java Python 的縮寫)由 Java 撰寫,運行在 Java 虛擬機上( Java Virtual Machine,JVM)
它允許開發人員使用 Python 語言撰寫和執行 Java 應用程式,可以在Jython中直接訪問Java類和方法
它提供了對 Java 類和庫的無縫集成,使得開發人員可以利用 Java 平臺的功能和生態系統
Jython 廣泛應用于 Java 開發中,尤其是需要結合 Python 腳本和 Java 代碼的場景
jython 的一個簡單應用:
# 匯入Java類
from java.util import ArrayList
# 創建一個Java ArrayList物件
list = ArrayList()
# 向串列中添加元素
list.add("Hello")
list.add("World")
# 使用Python的for回圈遍歷串列
for item in list:
print(item)
IronPython
IronPython 與 Jython 類似,它是 .NET 框架的 python 實作
它使用了微軟開發的動態語言運行時(DLR)和公共語言運行時(CLR),能夠與.NET框架無縫集成
開發人員可以在 .NET 平臺上撰寫和執行 Python 代碼,利用 .NET 框架的功能和資源
IronPython 的一個簡單應用:
import clr
clr.AddReference("System.Windows.Forms")
clr.AddReference("System.Drawing")
from System.Windows.Forms import Application, Form, Button
from System.Drawing import Point
# 創建表單類
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!"
# 創建應用程式并運行表單
Application.Run(MyForm())
MicroPython
根據字面意思可以得知—— MicroPython 是一種精簡版的 python 實作
它只包含了 python 標準庫中的一小部分并經過優化,以適應資源受限的環境,專為嵌入式系統和物聯網設備而設計
MicroPython具有以下特點:
- 小巧
- 支持硬體互動
- 垃圾回收和記憶體管理
- 互動式開發
- 跨平臺支持
總結一下
-
Python 實際上是一個語言規范,可以用不同的方式實作
-
為了能夠實作在特定的應用場景中具有不同的優勢和用途,開發人員用其他語言設計了不同的 python 實作
-
CPython 是最常用的 Python 實作,它是官方用 C 撰寫的 python 實作
-
除此之外還有像 jython、Pypy、Iron Python、Stackless Python 等
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/556686.html
標籤:其他
上一篇:基數排序
下一篇:返回列表