注: もともと私のサブスタックに投稿されました: https://open.substack.com/pub/andresalvareziglesias/p/speeding-up-python-code-with-c-and
Python は速度のパラダイムではありません。これは誰もが知っています。しかし、古き良き友人 C の助けを借りて、アプリの重要な部分のいくつかを高速化することができます。
フィボナッチ数列は、ソフトウェア開発を教えるために使用される古典的な例です。 0 と 1 で始まる一連の数値です。後続の各数値は、前の 2 つの数値の合計です。したがって、シーケンスは次のようになります: 0、1、1、2、3、5、8、13、21、34、...
次の方法で Python でフィボナッチを開発できます:
import time # Configure iterations iterations = 30 # Define fibonacci in native python def fibonacci(n): if n <= 1: return n else: return fibonacci(n-1) + fibonacci(n-2) # Calculate in pure python start_time = time.perf_counter() print(f"Calculating {iterations} iterations of fibonacci...") print(fibonacci(iterations)) end_time = time.perf_counter() execution_time_ms = (end_time - start_time) * 1000 print(f"Execution time: {execution_time_ms:.2f} milliseconds") print()
この純粋な Python (Google IDX 仮想マシン内) バージョンのフィボナッチを実行すると、次の結果が得られます:
同じシーケンスをプレーン C で開発できます:
#include <stdio.h> int fibonacci(int n) { if (n <= 1) { return n; } else { return fibonacci(n - 1) + fibonacci(n - 2); } }
GCC を使用してライブラリをコンパイルします:
gcc -o fibonacci.so -shared -fPIC -O2 fibonacci.c
これで、フィボナッチ数列関数を内部に持つネイティブ バイナリ ライブラリが完成しました。 ctypes (Python 自体は C で開発されているため、Python C タイプ ライブラリ) を使用して、このライブラリを Python アプリ内に埋め込むことができます。
import time from ctypes import c_double, c_int, CDLL # Configure iterations iterations = 30 # Import the C library library = CDLL('./fibonacci.so') fibonacciAsLibrary = library.fibonacci fibonacciAsLibrary.restype = c_int # Calculate as C library start_time = time.perf_counter() print(f"Calculating {iterations} iterations of fibonacci as C library...") print(fibonacciAsLibrary(iterations)) end_time = time.perf_counter() execution_time_ms = (end_time - start_time) * 1000 print(f"Execution time: {execution_time_ms:.2f} milliseconds") print()
ここで、このバージョンをフィボナッチで実行すると、次の結果が得られます:
もっといいですよね?
この種の統合は、次のような多くのアプリやシナリオで使用できます。
そしてあなたは?この小さなトリックをプロジェクトでどのように活用しますか?ぜひコメントをお待ちしています!
Python と Docker の投稿のうち、次のような他の関連トピック (常にテクノロジーとプログラミングのトピックであることを約束します...厳禁) についても書きます。
何か興味深いテクノロジー、プログラミング言語などを見つけたら、ぜひ知らせてください。私はいつでも新しいことを学ぶことにオープンです!
私はアンドレスです。パルマに拠点を置くフルスタック ソフトウェア開発者で、コーディング スキルを向上させるために個人的な旅を続けています。私は自費出版のファンタジー作家でもあり、自分の名前で 4 冊の小説を出版しています。何でもお気軽に聞いてください!
以上がC を使用した Python コードの高速化 (追加のライブラリなし)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。