【发布时间】:2018-10-07 03:26:40
【问题描述】:
我想将 lambda 表达式与 cython 一起使用,但它不适用于 cpdef。错误表示尚不支持,但cython changeleg 表示支持 lambda 表达式。
%%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
确实是不支持 lambda 表达式还是我遗漏了什么?
Python 版本 3.5.5; Cython 版本:0.24
【问题讨论】:
-
我只能看到“Python 函数完全支持闭包”和“类主体和模块级别支持 Lambda 表达式”与
cpdefs 无关。 -
但是,知道
cpdef有什么问题会很有趣,因为def和cdef似乎对 lambdas 没有问题 -
我假设当他们说它在模块级别受支持时,它暗示它在功能中受支持。但是,是的,情况可能并非如此。
-
@ead 我会解释为“Cython 支持内部函数和 lambda 表达式”。就像 OP 所做的那样,但是如果您考虑前一句(同一点),那就很模糊了。
-
这看起来应该是a bug report 不仅仅是一个问题。
标签: python python-3.x lambda cython