Domanda

Seguendo l'esempio qui, "Aumentare .pxd", sto cercando di utilizzare i file ".pxd" per aumentare un file Python puro.(Aggiungi definizioni di tipo esterne al file Python puro).

file pitone:

class A(object):
    def foo(self, i=3, x=None):
        print "Big" if i > 1000 else "Small"

file pxd:

cdef class A:
    cpdef foo(self, int i, x)

Ho un dizionario, che per impostazione predefinita è "None" in Python.Sfortunatamente, a Cython questo non piace.

Se utilizzo il mio file Python "puro", senza dichiarare un tipo o dichiarare il tipo come "dict" nel file pxd, ottengo l'errore:

"Firma non compatibile con dichiarazione precedente"

Ho notato che verrà compilato se NON specifico un valore predefinito, ma c'è un motivo per dichiarare i valori predefiniti.

C'è un modo per gestire la cosa?

È stato utile?

Soluzione

Gli argomenti facoltativi nelle funzioni cpdef sono dichiarati in modo diverso dalle funzioni cdef che essenzialmente sono le stesse delle funzioni Python.

Il tuo file .pxd dovrebbe essere modificato per essere scritto come

cdef class A:
    cpdef foo(self, int i=*, x=*)
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top