.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)
得出結果: