Domanda

I stava cercando di accelerare un po 'di codice, e poi ho provato la compilazione di una classe e una funzione tramite Cython

e WOW! Ho havn't misurato ancora ma sembra almeno 10 volte più veloce.

ho guardato Cython solo due giorni fa, sono molto impressionato!

Tuttavia, non posso ottenere eval () al lavoro.

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

I compilare questo per file di module1.pyd e lo chiamano con il file python:

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

Questo restituisce:

NameError:. Nome 'a' non è definito

Ogni aiuto è apprezzato.

È stato utile?

Soluzione

Questo perché eval non ha modo di esaminare l'ambiente per trovare a. Utilizzare la funzione locals passarlo l'ambiente.

def thefirst(a):
    return eval('1+2+a', locals())

Altri suggerimenti

Si può ottenere via con cython.inline:

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

Tuttavia, tenere d'occhio l'utilizzo della memoria del runtime di Python in questo caso. Ogni espressione distinta che viene compilato e caricato occupa parte della memoria. Questo può aggiungere fino se fate questo un sacco.

Hmm, io pensavo eval sarebbe abbastanza male per le prestazioni in ogni caso. Qual è il vostro caso applicativo concreto?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top