cython不支持用键排序?


def test():
    return sorted([(a,b) for a in xrange(10) for b in xrange(10)],
       key=lambda (x,y): x + y)

以上是有效的python代码,但在cython中触发了一个错误。错误消息是Expected ')', found ','

这是怎么回事?

Python 2.7, Cython 0.19.2

Cython 不支持嵌套元组参数解包。

您的lambda使用嵌套元组参数:

lambda (x,y): x + y

将其替换为:

lambda x: x[0] + x[1]

甚至只是:

sum

也许在这里也混入一些itertools.product(),例如:

from itertools import product
def test():
    return sorted(product(xrange(10), repeat=2), key=sum)

但无论如何,你最终都会得到主要由 C 例程提供的代码。

最新更新