banner
andrewji8

Being towards death

Heed not to the tree-rustling and leaf-lashing rain, Why not stroll along, whistle and sing under its rein. Lighter and better suited than horses are straw sandals and a bamboo staff, Who's afraid? A palm-leaf plaited cape provides enough to misty weather in life sustain. A thorny spring breeze sobers up the spirit, I feel a slight chill, The setting sun over the mountain offers greetings still. Looking back over the bleak passage survived, The return in time Shall not be affected by windswept rain or shine.
telegram
twitter
github

詳解 Python 文件: .py、.ipynb、.pyi、.pyc、​.pyd !

.py#

最常見的 Python 程式碼檔案副檔名,官方稱 Python 源代碼檔案。

不用過多解釋了~

.ipynb#

這個還是比較常見的,.ipynb 是 Jupyter Notebook 檔案的擴展名,它代表 "IPython Notebook"。

image
學過資料分析,機器學習,深度學習的同學一定不陌生!

.pyi#

.pyi 檔案是 Python 中的類型提示檔案,用於提供程式碼的靜態類型資訊。

一般用於幫助開發人員進行類型檢查和靜態分析。

示例程式碼:

# hellp.pyi

def hello(name: str) -> None:
    print(f"hello {name}")

.pyi 檔案的命名約定通常與相應的.py 檔案相同,以便它們可以被自動關聯在一起。

.pyc#

.pyc 是 Python 位元組碼檔案的擴展名,用於儲存已編譯的 Python 源代碼的中間表示形式,因為是二進位檔案所以我們無法正常閱讀裡面的程式碼。

image
.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)

得出結果:

image

載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。