3

組み込みの re モジュールが非常に遅いように見えるため、Cython コードで regex.h ライブラリを使用したいのですが、それを行うのに多くの問題があります。.pxd ファイルを作成し、コードで外部モジュールとして使用する必要があることは理解していますが、Python/Cython は初めてです。

これは私の regex.pxd ファイルです:

cdef extern from *:
    ctypedef char const_char "const char"

cdef extern from "regex.h" nogil:
    int regcomp(regex_t* PREG, const char* REGEX, int CFLAGS)
    int regexec(const regex_t *PREG, const char *STRING, size_t NMATCH, regmatch_t   PMATCH[], int EFLAGS)

私はコマンドを実行しています:$python setup.py build_ext --inplace

そして、実行後にこのエラーが発生します

regex.pxd:6:27: Expected ')', found '*'

コードregex.h内でライブラリを使用する方法について他にアイデアはありますか?Cython

4

2 に答える 2

2

Cython バージョン 0.18 以降にアップグレードします。(注:質問はそのリリース前に尋ねられました)

そのバージョンの関連するリリース ノートは、「Cconst宣言は言語でサポートされています」です。

于 2014-05-14T06:51:12.523 に答える
1

const以前の経験から、指定子がそれを混乱させていると思います。外部Cコードとのインターフェースに関するCythonドキュメントから、Cヘッダーファイルの参照の下:

const を使用しないでください。Cython は const について何も知らないので、そのままにしておきます。ほとんどの場合、これで問題が発生することはありませんが、まれにキャストを使用する必要がある場合があります。

コードを自分のマシンの .pxd ファイルにコピーしたところ、Cython で同じエラーが発生しました。ビットを削除するconstと、そのエラーが解消されました。

于 2012-06-18T13:05:37.263 に答える