2016-04-14 4 views
0

Wie kann ich Konstanten (verschiedener Typen - nicht nur Enumerationswerte) deklarieren und sie zwischen mehreren .pyx Dateien teilen?Nicht-Integer-Konstante in .pyx-Datei importieren

Innerhalb einer .pyx Datei, kann ich erklären und Konstanten verwenden:

DEF FavouriteFood = "spam" 
DEF ArraySize = 42 
print(FavouriteFood) 
print(ArraySize) 

Und mit einer .pxd Datei, kann ich share C functions oder share types.

Aber wie kann ich Konstanten teilen? Die Dokumente zeigen einen very limited way of doing this with anonymous enums an, aber Werte in diesen können nur ints sein. Wie kann ich zum Beispiel eine konstante Zeichenkette oder einen Float in eine .pyx Datei importieren?

Antwort

1

Sie eine sehr kurze Inline-Funktion verwenden könnte (in the pxd file), die gerade wieder die Konstante

cdef inline const char* GetFavouriteFood(): 
    return "spam" 

cdef inline float GetHowMuch(): 
    return 4.5 

Die andere Option, die Konstanten in C in einer Header-Datei dann zu definieren wäre (in Ihrem pxd) tun

Der C-Compiler (anstelle von Cython) erzwingt die Konsistenz, so dass Fehler in diesem Stadium auftreten, wenn Sie versuchen, sie zu ändern. Dies beinhaltet die Erstellung einer zusätzlichen Datei, so dass ich persönlich den Inline-Funktionsansatz bevorzuge.