首页 > 解决方案 > 为什么 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 建议给我的文章,但没有解决方案突然出现在我身上。以下是后人的文章:

标签: python-3.xinteractivejupyter-labnameerrorsage

解决方案


  • 确保ipywidgets已安装。
  • 通过以下方式激活小部件:jupyter nbextension enable --py widgetsnbextension
  • 对于 Jupyter 实验室使用:jupyter labextension install @jupyter-widgets/jupyterlab-manager
  • 最后:import ipywidgets as widgetsfrom 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


推荐阅读