Использование необязательных (ключевых слов) аргументов в (C callable) методе cdef в Cython
Можно ли определить (C вызываемый) метод (так через cdef
вместо def
) с ключевыми словами, например
cdef double function(x, **kwargs):
if "factor" in kwargs:
x = x * kwargs["factor"]
return x*2
Я знаю, что могу разделить функцию на две части: одну с **kwargs
который вызывает функцию cdef. В настоящее время я пытаюсь иметь один и тот же исходный код для Python и Cython с некоторыми дополнительными строками Pyorcy.
1 ответ
Нет. cdef
функции генерируют сигнатуру функции в стиле C, и в ней нет реального способа представить аргументы ключевых слов.
Вы можете сделать так, чтобы функция принимала словарь, который вы эффективно используете в качестве аргументов ключевого слова:
cdef double function(x, kwargs):
# the rest as before
Почему вы хотите cdef
функционировать? def
функции, определенные в Cython, все еще скомпилированы и могут выполнять большинство одинаковых действий cdef
функции могут, так что есть мало причин, чтобы сделать ваши функции cdef
если вы не найдете, что должны.