Ответ 1
Вы можете объявить функцию с различными параметрами ("cppcode.pxd"
):
cdef extern from "cppcode.hpp":
int init(char *address, int port, bint en_msg, int error)
int init(char *address, int port, bint en_msg)
int init(char *address, int port)
int init(char *address)
int init()
Где "cppcode.hpp"
:
int init(const char *address=0, int port=0, bool en_msg=false, int error=0);
Он может использоваться в коде Cython ("pycode.pyx"
):
cimport cppcode
def init(address=None,port=None,en_msg=None,error=None):
if error is not None:
return cppcode.init(address, port, en_msg, error)
elif en_msg is not None:
return cppcode.init(address, port, en_msg)
elif port is not None:
return cppcode.init(address, port)
elif address is not None:
return cppcode.init(address)
return cppcode.init()
И попробовать его в Python ("test_pycode.py"
):
import pycode
pycode.init("address")
Выход
address 0 false 0
Cython также имеет arg=*
синтаксис (в файлах *.pxd
) для необязательных параметров:
cdef foo(x=*)