为什么';#的理论';变量突然停止在ipython jupyter笔记本中工作?

为什么';#的理论';变量突然停止在ipython jupyter笔记本中工作?,python,jupyter,Python,Jupyter,在python中,“\ux”变量存储最后一个表达式的结果 然而,在我的jupyter笔记本副本中,由于某种原因,当使用sympy时,此功能突然停止工作。有人知道什么会导致命令之间的“\u1”停止更新吗 到目前为止,我一直在努力: *重新安装“活动状态python” *重新启动jupyter服务器 *重新启动内核并重新运行所有 实际上,我想知道的原因是,我在下面试过一次,然后突然停止工作。。但是,将多个命令串在一起并在每次停止使用“\u1”时查看它们的输出的功能太方便了,不能仅仅因为它突然停止工

在python中,“\ux”变量存储最后一个表达式的结果

然而,在我的jupyter笔记本副本中,由于某种原因,当使用sympy时,此功能突然停止工作。有人知道什么会导致命令之间的“\u1”停止更新吗

到目前为止,我一直在努力:

*重新安装“活动状态python” *重新启动jupyter服务器 *重新启动内核并重新运行所有

实际上,我想知道的原因是,我在下面试过一次,然后突然停止工作。。但是,将多个命令串在一起并在每次停止使用“\u1”时查看它们的输出的功能太方便了,不能仅仅因为它突然停止工作就停止使用它。。。我想知道如何修复它

import sympy as sp
sp.init_printing()

N=a*b*100 - (a**2) * (b**2)
D=2*(a-b)

V = N / D
V.diff(a)
_.simplify()
_.expand(numer=True)
_.expand(denom=True)

如果您曾经写入(分配给)“\u1”,那么您将有效地创建一个具有相同名称的多个变量,该变量随后“隐藏”或优先于预定义变量“\u1”。当然,您定义的“\ux”并没有像预定义的“\ux”那样获得存储最后计算的表达式值的神奇行为

如果发生了这种情况,可以通过执行以下一项或两项操作来纠正:

  • del 35;删除您定义的“35;”
  • 重新启动笔记本中的内核

  • 我怀疑你的Jupyter笔记本有什么问题。只是对交互控制台的工作原理存在误解

    让我们来研究一下这个古怪的
    \uuu

    >>> 1+1
    2                #  output printed stored in _
    >>> _
    2
    >>> a = 10+10    #  output not printed and therefore not stored in _
    >>> _
    2            
    >>> a
    20               #  output stored in _
    >>> _
    20
    
    这让人相信,如果控制台中没有打印任何内容,那么值就不会存储在
    \uuu
    中。但是现在

    >>> print(1)
    1
    >>> _
    20               #  gives previous output
    
    然后,这表明如果没有返回任何内容,则该值不会存储在
    \uuu
    中。(请记住,
    print
    函数返回
    None

    那么你的代码里发生了什么

    N=a*b*100 - (a**2) * (b**2)    #  assignment, no result returned => nothing stored in _    
    D=2*(a-b)                      #    ditto
    
    V = N / D                      #    ditto
    V.diff(a)                      #  returns an instance of <class sympy.core.add.Add> => stored in _    
    _.simplify()                   #  returns an instance of <class sympy.core.mul.Mul> => stored in _    
    _.expand(numer=True)           #    ditto
    _.expand(denom=True)           #    ditto
    
    相反,请确保返回一个值

    a*b*100 - (a**2) * (b**2)      #  result returned => value stored in _
    display(_)                     #  ok
    N = _                          #  ok, retained N
    
    解决这一问题的简单方法是使用
    N
    D
    V
    代替

    N=a*b*100 - (a**2) * (b**2)
    display(N)                     #  ok
    D=2*(a+b)
    display(D)                     #  ok
    V = N / D
    display(V)                     #  ok
    

    是时候停止松懈了,是时候开始使用这些变量名了。ᕕ(◔ω◔)ᕗ

    “停止工作”太模糊了,无法诊断。我真的不明白你为什么要用那种方式使用
    ,但是
    sp.init\u printing()
    在这里有一个令人怀疑的贴切的名字;你看了它的作用了吗?我不使用Jupyter笔记本,但在REPL上,如果没有从上一条语句中打印任何内容,那么就没有任何内容存储在
    \uu
    中。作业不会打印任何内容……另一个注意事项是,
    显示(N)
    显示(D)有什么问题吗
    显示(V)
    ?@roganjosh:当我在双引号之间键入下划线并提交给SO时,下划线神秘地消失了,只留下双引号。我意识到提交后。我尝试用反斜杠转义下划线-谢天谢地,这起作用了。两边都有下划线的文本将使其斜体化。我想这就是发生的事情,写下这个答案非常不幸:Pok…我明白了…我误解了python“\ux”变量的工作原理…如果您还没有将它保存到变量中,它只会将它存储在这个变量中…将它分配给变量的行为会将对象重定向到变量,而不会显示它。
    N=a*b*100 - (a**2) * (b**2)
    display(N)                     #  ok
    D=2*(a+b)
    display(D)                     #  ok
    V = N / D
    display(V)                     #  ok