2010-10-04 8 views
6

Nach dem Beispiel "Augementing .pxd" versuche ich ".pxd" -Dateien zu verwenden, um eine reine Python-Datei zu ergänzen. (Fügen Sie Typdefinitionen extern zur reinen Python-Datei hinzu).Verwenden von Cython-PXD-Dateien zum Erweitern von reinen Python-Dateien

Python-Datei:

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

pxd Datei:

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

Ich habe ein Wörterbuch bekam, die ich auf "None" in Python säumigen. Leider mag Cython das nicht.

Wenn ich meine „reine“ Python-Datei verwenden, ohne einen Typen zu deklarieren oder die Art zu erklären als „dict“ in der pxd Datei ich den Fehler:

"Signature not compatible with previous declaration"

Ich bemerkte, dass es kompiliert wird, wenn ich Geben Sie keinen Standardwert an, aber es gibt einen Grund, die Standardwerte zu deklarieren.

Gibt es eine Möglichkeit, dies zu handhaben?

Antwort

13

Optionale Argumente in cpdef-Funktionen werden anders als cdef-Funktionen deklariert, die im Wesentlichen mit Python-Funktionen identisch sind.

sollte Ihre .pxd Datei geändert werden ich, dass die Arbeit geschrieben werden als

cdef class A: 
    cpdef foo(self, int i=*, x=*) 
+0

Dank jetzt haben. Das nächste Problem ist __init__ method def in der pxd-Datei ... – monkut

Verwandte Themen