SWIGを使用したPython用のC/C++のラッピング
Pythonで既存のCまたはC++機能をラップする方法は複数あります。このセクションでは、C /C++機能をSWIGでラップする方法を説明します。以下は、Pythonでc /c++機能をラップするための他のオプションです。
- 手動ラッピング
- pyrexを使用してCコードをラップします。
- Ctypes
- SIP
- Pythonのブースト
SWIG(Simple Wrapper Interface Generator)は、Perl、Python、PHP、Ruby、Tcl、C#、Common Lisp(CLISP、Allegro、CL、UFFI、CFFI)、Java、Modula-3、 OCAML。 Swigは、複数のインタプリタおよびコンパイルされたScheme実装(Guile、MzScheme、Chickenなど)もサポートしています。
ただし、Pythonでの実装についてはここでのみ説明します。
SWIGは、基本的にCコードを理解し、選択した言語のラッパーコードを吐き出すマクロ言語です。
インストール
「swigwin-3.0.12」windowsswigインストーラーを使用しています。次の場所からダウンロードできます:
https://www.swig.org/download.html
それとは別に、Windowsでswigプログラムを実行するには、「MicrosoftVisualStudio14.0」以降が必要になる場合があります。
swigの使用法を説明するために、いくつかのc関数があり、それをTcl、Perl、Python(Pythonと対話しています)、Java、C#などの他の言語に追加したいとします。
私のcファイルはexample.cです
#include "example.h" int fact(int n) { if (n < 0) { /* This should probably return an error, but this is simpler */ return 0; } if (n == 0) { return 1; } else { /* testing for overflow would be a good idea here */ return n * fact(n-1); } }
インターフェースファイル:
ここで、cファイルを好みの言語に追加する場合は、SWIGへの入力である「インターフェイスファイル」を作成する必要があります。 example.cのインターフェースファイルは、
です。example.i
/* File: example.i */ %module example %{ #define SWIG_FILE_WITH_INIT #include "example.h" %} %include "example.h"
ヘッダーファイル
前のサンプルファイルのヘッダーファイルをインクルードしました。これが私のヘッダーファイルです:
example.h
int fact(int n);
セットアップファイル:
from distutils.core import setup, Extension example_module = Extension('_example', sources=['example_wrap.c', 'example.c'], ) setup (name = 'example', version = '0.1', author = "SWIG Docs", description = """Simple swig example from docs""", ext_modules = [example_module], py_modules = ["example"], )
ラッパーの作成
次に、インターフェースファイル(example.i)を使用してPythonラッパーを作成します。関数のラッパーを作成するには、CLIで以下のコマンドを実行するだけです。
>swig -python example.i
これで、現在の作業ディレクトリが表示されたら、新しいファイルが作成されます。上記のファイル名を私のものとして使用している場合、ラッパーファイルは「example_wrap.c」になります。それ以外の場合、ラッパーファイルの名前は
のようになります。“Your_File_Name” + “_wrapper” + “Your_language_extension”
したがって、サンプルファイルがtest.cの場合、ラッパーファイルは「test_wrapper.c」になります。
拡張機能を構築
>python setup.py build_ext running build_ext building '_example' extension creating build creating build\temp.win32-3.6 creating build\temp.win32-3.6\Release ….
これで、c言語をPython言語にラップできるようになりました。確認するには、直接実行するか、仮想環境を作成して個別に実行します。
C:\Users\rajesh>mkdir swigExample && cd swigExample C:\Users\rajesh\swigExample>virtualenv swigenv Using base prefix 'c:\\python\\python361' New python executable in C:\Users\rajesh\swigExample\swigenv\Scripts\python.exe Installing setuptools, pip, wheel...done. C:\Users\rajesh\swigExample>.\swigenv\Scripts\activate (swigenv) C:\Users\rajesh\swigExample>python
これで、ファイルのインポート機能から実行できます。
>>> from example import fact >>> fact(6) 720
-
n番目のカタラン数のC/C ++プログラム?
カタラン数は一連の数です。カタラン数は、さまざまなカウントの問題で発生する一連の自然数を形成します。多くの場合、再帰的に定義されたオブジェクトが関係します。 C n 長さ2nのディック言語の数です。ディックワードは、n個のXとn個のYで構成される文字列であり、文字列の最初のセグメントにXより多くのYが含まれることはありません。たとえば、次は長さ6のディック言語です XXXYYY XYXXYY XYXYXY XXYYXY XXYXYY. 記号Xを開き括弧として、Yを閉じ括弧として再解釈します。C n 正しく一致するn組の括弧を含む式の数をカウントします ((()
-
Pythonを使用したWebサイトブロッカー
大規模なIT企業で働いている場合は、その2つのWebサイト、特にFacebook、YouTube、Instagramなどのソーシャルネットワーキングサイトがブロックされていることに気付くかもしれません。 サードパーティのアプリケーションを使用して特定のWebサイトをブロックする代わりに、選択したWebサイトをブロックする独自のカスタムアプリケーションを開発できます。PythonでWebサイトブロッカーを開発することもそれほど難しくありません。それが私たちがやろうとしていることです-私たちが望むウェブサイトをブロックするPythonスクリプトを開発します。 前提条件: Python3.xが