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

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