我被分配在Sage项目中使用@interact
。课堂笔记中提供的代码是:
@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实验室。使用Python3或Sage内核会导致同样的问题。
我读过很多建议我的文章,但没有任何解决方案。以下是留给后人的文章:
- 使用iPython笔记本时出现名称错误(来自函数(
- Ipython笔记本:导入的脚本函数的名称错误
- 函数名称错误
- Python名称错误:未定义名称
- python中的NameErrors和函数
- 确保已安装
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
。
编辑:这要归功于威尔·科尔森。