Ontem fiz uma pequena introdução ao Cython.
Cython é uma plataforma que traduz código Python para C e o compila em biblioteca compartilhada importável no próprio Python. A linguagem em si é um superset de Python, com tipagem estática ou dinâmica (duck-typing) e suporte a código especial que pode ser traduzido diretamente para C.
Uma parte importante de Cython é sua tipagem estática, mas os tipos pode ser um pouco diferentes de Python.
Há tipos específicos, como
Cython é uma plataforma que traduz código Python para C e o compila em biblioteca compartilhada importável no próprio Python. A linguagem em si é um superset de Python, com tipagem estática ou dinâmica (duck-typing) e suporte a código especial que pode ser traduzido diretamente para C.
Uma parte importante de Cython é sua tipagem estática, mas os tipos pode ser um pouco diferentes de Python.
Há tipos específicos, como
struct
e enum
, que são traduzidos diretamente para o equivalente C, e tipo de extensão (cdef class
). Entre eles:Tipo Cython | Tipo C | Coerção para Python 3 |
---|---|---|
bool |
PyLongObject * |
bool |
bint |
int |
bool |
size_t |
size_t |
int |
char |
char |
int |
unsigned char |
unsigned char |
int |
int |
int |
int |
long |
long |
int |
long long |
long long |
int |
float |
float |
float |
double |
double |
float |
const char * |
const char * |
bytes |
bytes |
PyBytesObject * |
bytes |
const Py_UNICODE * |
const Py_UNICODE * |
str |
unicode |
struct PyUnicodeObject |
str |
object |
PyObject * |
object |
list |
PyListObject * |
list |
dict |
PyDictObject * |
dict |
set |
PySetObject * |
set |
tuple |
PyTupleObject * |
tuple |
void * |
void * |
sem equivalência |
struct S |
struct S |
dict |
enum E |
enum E |
int |
Todos os modificadores C (
unsigned
, const
, long
, *
…) são aceitos. Na coerção de tipos, também é aceito &
. Se um valor numérico for recebido por uma variável do tipo object
, será usado PyLongObject *
(inteiro de tamanho arbitrário) ou PyFloatObject *
(ponto flutuante, equivalente a double
de C).
[]’s
ℭacilhας, La Batalema