Использование необязательных (ключевых слов) аргументов в (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 если вы не найдете, что должны.

Другие вопросы по тегам