.py#
最常見的 Python 程式碼檔案副檔名,官方稱 Python 源代碼檔案。
不用過多解釋了~
.ipynb#
這個還是比較常見的,.ipynb 是 Jupyter Notebook 檔案的擴展名,它代表 "IPython Notebook"。
學過資料分析,機器學習,深度學習的同學一定不陌生!
.pyi#
.pyi 檔案是 Python 中的類型提示檔案,用於提供程式碼的靜態類型資訊。
一般用於幫助開發人員進行類型檢查和靜態分析。
示例程式碼:
# hellp.pyi
def hello(name: str) -> None:
print(f"hello {name}")
.pyi 檔案的命名約定通常與相應的.py 檔案相同,以便它們可以被自動關聯在一起。
.pyc#
.pyc 是 Python 位元組碼檔案的擴展名,用於儲存已編譯的 Python 源代碼的中間表示形式,因為是二進位檔案所以我們無法正常閱讀裡面的程式碼。
.pyc 檔案包含了已編譯的位元組碼,它可以更快地被 Python 解譯器載入和執行,因為解譯器無需再次編譯源代碼。
.pyd#
.pyd 是 Python 擴展模組的擴展名,用於表示使用 C 或 C++ 編寫的二進位 Python 擴展模組檔案。
.pyd 檔案是編譯後的二進位檔案,它包含了編譯後的擴展模組程式碼以及與 Python 解譯器互動所需的資訊。
此外,.pyd 檔案通過 import 語句在 Python 中匯入和使用,就像匯入普通的 Python 模組一樣。
由於 C 或 C++ 的執行速度通常比純 Python 程式碼快,可以使用擴展模組來優化 Python 程式碼的性能,尤其是對於計算密集型任務。
.pyw#
.pyw 是 Python 視窗化腳本檔案的擴展名。
它表示一種特殊類型的 Python 腳本檔案,用於創建沒有命令行介面(即控制台視窗)的視窗化應用程式。
一般情況下,執行 Python 腳本會打開一個命令行視窗,其中顯示腳本輸出和接受用戶輸入。但是,對於某些應用程式,如圖形用戶界面(GUI)應用程式,不需要命令行介面,而是希望在視窗中顯示互動界面。這時就可以使用.pyw 檔案。
示例程式碼:
# click_button.pyw
import tkinter as tk
def button_click():
label.config(text="Button Clicked!")
window = tk.Tk()
button = tk.Button(window, text="Click Me", command=button_click)
button.pack()
label = tk.Label(window, text="Hello, World!")
label.pack()
window.mainloop()
.pyx#
.pyx 是 Cython 源代碼檔案的擴展名。
Cython 是一種編譯型的靜態類型擴展語言,它允許在 Python 程式碼中使用 C 語言的語法和特性,以提高性能並與 C 語言庫進行互動。
我對比了下 Cython 與普通 python 的執行速度:
fb.pyx (需使用 cythonize 命令進行編譯)
import fb
import timeit
def fibonacci(n):
if n <= 0:
raise ValueError("n必須是正整數")
if n == 1:
return 0
elif n == 2:
return 1
else:
a, b = 0, 1
for _ in range(3, n + 1):
a, b = b, a + b
return b
# 純Python版本
python_time = timeit.timeit("fibonacci(300)", setup="from __main__ import fibonacci", number=1000000)
# Cython版本
cython_time = timeit.timeit("fb.fibonacci(300)", setup="import fb", number=1000000)
print("純Python版本執行時間:", python_time)
print("Cython版本執行時間:", cython_time)
run.py
import fb
import timeit
def fibonacci(n):
if n <= 0:
raise ValueError("n必須是正整數")
if n == 1:
return 0
elif n == 2:
return 1
else:
a, b = 0, 1
for _ in range(3, n + 1):
a, b = b, a + b
return b
# 純Python版本
python_time = timeit.timeit("fibonacci(300)", setup="from __main__ import fibonacci", number=1000000)
# Cython版本
cython_time = timeit.timeit("fb.fibonacci(300)", setup="import fb", number=1000000)
print("純Python版本執行時間:", python_time)
print("Cython版本執行時間:", cython_time)
得出結果: