python-3.x - 为什么 ipython 在装饰交互时返回 NameError?
问题描述
我被分配@interact
在一个 Sage 项目中使用。课堂笔记中提供的代码是:
@interact
def show_crank(angle = slider(0,2*pi,pi/20,pi/10,label='angle')):
center = (0,0)
endpnt = (cos(angle),sin(angle))
pltcnt = point(center, size = 50)
pltend = point(endpnt, size = 50)
crank = line([center,endpnt])
(pltcnt + crank + pltend).show(xmin=-1,xmax=1,ymin=-1,ymax=1)
但是,当我尝试运行它时,
NameError: name 'interact' is not defined
被退回。我目前正在使用 Jupyter Lab。使用 Python 3 或 Sage 内核会导致同样的问题。
我已经阅读了 SO 建议给我的文章,但没有解决方案突然出现在我身上。以下是后人的文章:
解决方案
- 确保
ipywidgets
已安装。 - 通过以下方式激活小部件:
jupyter nbextension enable --py widgetsnbextension
- 对于 Jupyter 实验室使用:
jupyter labextension install @jupyter-widgets/jupyterlab-manager
- 最后:
import ipywidgets as widgets
和from ipywidgets import *
这解决了问题的一部分,但不能解决另一个问题。
def show_crank(angle = slider(0,2*pi,pi/20,pi/10,label='angle')):
提示 NameError: name 'slider' is not defined
。使用 Jupyter Lab 时,正确的函数调用是FloatSlider
.
编辑:这归功于 Will Koehrsen。