运行 Cython 得到错误 "Expected an identifier or literal"

Running Cython get the error "Expected an identifier or literal"

我在 Juypter 中 运行 cython 代码

%%cython
def g(int x):
    return x ** 2 - x
%timeit g(100)

我得到了错误

Error compiling Cython file:
------------------------------------------------------------
...
def g(int x):
    return x ** 2 - x
%timeit g(100)
^
------------------------------------------------------------

.ipython\cython\_cython_magic_8761e7cbf8d4d8c5fac6d16631958fb9.pyx:3:0: Expected an identifier or literal

但是如果我运行将两段代码分开

%%cython
def g(int x):
    return x ** 2 - x
%timeit g(100)

我能得到答案

48.4 ns ± 0.136 ns per loop (mean ± std. dev. of 7 runs, 10000000 loops each)

我不知道是什么原因造成的

%%timeit is a line magic 并且可以用作 单元魔术模式 线魔术模式 但需要两个不同的语法!

%%timeit用作单元魔法,而%timeit用作线魔法。

%timeit 将为写在同一行的表达式计时,而 %%timeit 将为整个单元格 运行。

所以现在我们可以看到你这个例子的问题了!使用 cell magic 不是正确的方法,您应该将它放在单元格的最顶部!当您需要进行一些设置和工作时,这很有用,但对于您的单个案例,line magic 版本应该足够了!

此外,您正在添加 %%cython 细胞魔法,这可能与 %%timeit 细胞魔法不兼容,所以要小心!