.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 ファイルは Python で import 文を使用してインポートおよび使用され、通常の 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 must be a positive integer")
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
# Pure Python version
python_time = timeit.timeit("fibonacci(300)", setup="from __main__ import fibonacci", number=1000000)
# Cython version
cython_time = timeit.timeit("fb.fibonacci(300)", setup="import fb", number=1000000)
print("Pure Python version execution time:", python_time)
print("Cython version execution time:", cython_time)
run.py
import fb
import timeit
def fibonacci(n):
if n <= 0:
raise ValueError("n must be a positive integer")
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
# Pure Python version
python_time = timeit.timeit("fibonacci(300)", setup="from __main__ import fibonacci", number=1000000)
# Cython version
cython_time = timeit.timeit("fb.fibonacci(300)", setup="import fb", number=1000000)
print("Pure Python version execution time:", python_time)
print("Cython version execution time:", cython_time)
結果は次のとおりです: