Лямбда-выражение в функции cython - PullRequest
0 голосов
/ 26 апреля 2018

Я хочу использовать лямбда-выражение с cython, но оно не работает с cpdef. Ошибка говорит о том, что она еще не поддерживается, но cython changeleg говорит, что лямбда-выражения поддерживаются.

%%cython
cimport numpy as np
import numpy as np

cdef foo():
    a = np.random.randint(1,10,10)
    b = sorted(a, key = lambda x: x%np.pi)   #Compiles
    return(b)

cpdef goo():
    a = np.random.randint(1,10,10)
    b = sorted(a)    #Compiles
    return(b)

cpdef hoo():
    a = np.random.randint(1,10,10)
    b = sorted(a, key = lambda x: x%np.pi)   #Compile time error
    return(b)

Error compiling Cython file:
------------------------------------------------------------
...
cpdef goo():
    a = np.random.randint(1,10,10)
    b = sorted(a) 
    return(b)

cpdef hoo():
     ^
------------------------------------------------------------

/********/.cache/ipython/cython/_cython_magic_63378538fa4250ed3135e0289d6af7a0.pyx:14:6: closures inside cpdef functions not yet supported

Действительно ли лямбда-выражения не поддерживаются или я что-то упустил?

Python версия 3.5.5; Версия Cython: 0,24

1 Ответ

0 голосов
/ 01 июля 2018

Это только о замыканиях внутри методов cpdef. Если вы не определяете какую-либо функцию внутри функции cpdef, то есть замыкания, это будет работать. Лямбда-выражение - это просто функция, но со специфическим синтаксисом. Попробуйте это.

def sort_key(x):
   return x%np.pi

cpdef hoo():
   a = np.random.randint(1,10,10)
   b = sorted(a, key = sort_key)
   return(b)
...