4

私はいくつかのコードを高速化しようとしていたので、cython を使用してクラスと関数をコンパイルしようとしました

そしてすごい!まだ測定していませんが、少なくとも 10 倍高速に見えます。

私はちょうど 2 日前に cython を初めて見ましたが、とても感銘を受けました!

ただし、 eval() を機能させることはできません。

def thefirst(int a):
    d = eval('1+2+a')
    return d

これを module1.pyd ファイルにコンパイルし、python ファイルで呼び出します。

from module1 import thefirst
x = thefirst(2)
print x

これは以下を返します:

NameError: 名前 'a' が定義されていません。

すべての助けに感謝します。

4

2 に答える 2

7

これは、eval検索する環境を調べる方法がないためaです。locals関数を使用して環境に渡します。

def thefirst(a):
    return eval('1+2+a', locals())
于 2010-04-07T00:00:28.157 に答える
4

cython.inline でうまくいくかもしれません:

http://wiki.cython.org/enhancements/inline

ただし、この場合、Python ランタイムのメモリ使用量に注意してください。コンパイルおよびロードされる個々の式は、いくらかのメモリーを占有します。これをたくさん行うと、これが加算される場合があります。

于 2011-04-16T14:09:39.603 に答える