gpt4 book ai didi

jupyter-notebook - 为什么 Jupyter Notebook "forget"Cython 从一个单元格到下一个单元格?

转载 作者:行者123 更新时间:2023-12-01 09:47:22 29 4
gpt4 key购买 nike

当我用 cython 编译一个单元格时,Jupyter 似乎忘记了下一个单元格中的编译函数。这在我看来是不对的。出了什么问题?

我正在使用笔记本的 5.0.0 版本,并且

Python 3.6.1 |Anaconda custom (x86_64)| (default, May 11 2017, 13:04:09) 
[GCC 4.2.1 Compatible Apple LLVM 6.0 (clang-600.0.57)]

这是产生问题的MWE:

单元格 1:
%load_ext Cython

单元格 2:
%%cython
cdef int foo():
return 3

print(foo())

这会产生:
3

在下一个单元格中,我有
print(foo())

这会产生:
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
<ipython-input-3-9701608cebc0> in <module>()
----> 1 print(foo())

NameError: name 'foo' is not defined

最佳答案

我想这是因为你没有定义你的 foo函数在 python 中可用(带有 cpdef )但只给它一个 C 签名(带有 cdef )所以它只能从 cython 代码中调用。
在单元格 2 中,您可以调用它,因为您仍在使用 cython 代码,但在单元格 3 中,您又回到了纯 python 中,并且该函数不可用。有多种方法可以从 foo 获取结果python中的函数:

%%cython
# Not reachable in pure python:
cdef int foo():
return 3

# Python visible function signature:
cpdef int foo2():
return 3

# Or a wrapper around the cython function:
def foo3():
return foo()

您现在可以尝试调用 foo2()foo3()在你的 python 代码中。

请参阅 documentation 的相关部分之一如果你还没有看到它。

关于jupyter-notebook - 为什么 Jupyter Notebook "forget"Cython 从一个单元格到下一个单元格?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45792727/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com