为什么给双下划线赋值会破坏ipython中单下划线的行为?

为什么给双下划线赋值会破坏ipython中单下划线的行为?,python,ipython,Python,Ipython,我一直在玩IPython中的,并注意到一些奇怪的行为,当在以前的输出中使用单下划线时,会产生意想不到的结果 在写这个问题之前,我不知道在IPython中实现的输出缓存系统,我想如果我想通过访问特殊的变量来使用之前的输出,我应该使用双下划线作为伪变量 审议下一届会议: Python 3.6.7 (default, Oct 22 2018, 11:32:17) Type 'copyright', 'credits' or 'license' for more information IPython

我一直在玩IPython中的,并注意到一些奇怪的行为,当在以前的输出中使用单下划线时,会产生意想不到的结果

在写这个问题之前,我不知道在IPython中实现的输出缓存系统,我想如果我想通过访问特殊的变量来使用之前的输出,我应该使用双下划线作为伪变量

审议下一届会议:

Python 3.6.7 (default, Oct 22 2018, 11:32:17) 
Type 'copyright', 'credits' or 'license' for more information
IPython 7.3.0 -- An enhanced Interactive Python. Type '?' for help.

In [1]: 2*3                                                                               
Out[1]: 6

In [2]: 4 + _  # expect 10, OK                                                            
Out[2]: 10

In [3]: __, something = 1, 2                                                              

In [4]: 3*3                                                                               
Out[4]: 9

In [5]: 3 + _  # expect 3+9=12, but:                                                      
Out[5]: 13
正如您在上面看到的,在为uuu赋值之后,使用u不会给出预期的结果

在阅读了前面链接的参考资料后,我知道我可能不应该搞砸uu、uuu或uuu。分配其中一个会冻结所有其他的吗? 文档中没有提示这些问题。而且,我发现这是非常违反直觉的,因为常规python shell的行为不同。在常规shell中完成上述示例后,最终输出与预期一样


提前感谢您的反馈

IPython还有3个特定变量:u、u和uu, 每次你执行死刑时,他们都会四处走动;->\u->\ u->\ u->\ u->\ u->已放弃,最后一个结果->\u

如果其中一个变量被赋值;然后旋转停止

In [1]: 1
Out[1]: 1

In [2]: 2  # _:1, __:'', ___:''
Out[2]: 2

In [3]: 3  # _:2, __:1, ___:'' 
Out[3]: 3

In [4]: ___ ='something', # _:3, __:2, ___:1

In [5]: __ # still gonna be 2
Out[5]: 2

In [6]: __ # still gonna be 2 again
Out[6]: 2

In [7]: _ # still 3
Out[7]: 3
这值得讨论,但很难修改;很难弄清楚这是什么意思,以及用户是否修改了uuu、uuuu或uuuu


在上面的示例中,将某个值替换为1,因为1是1==True,所以IPython将不会检测到您已指定了一个下划线并继续四处移动

IPython还有3个特定变量:u、u和uu, 每次你执行死刑时,他们都会四处走动;->\u->\ u->\ u->\ u->\ u->已放弃,最后一个结果->\u

如果其中一个变量被赋值;然后旋转停止

In [1]: 1
Out[1]: 1

In [2]: 2  # _:1, __:'', ___:''
Out[2]: 2

In [3]: 3  # _:2, __:1, ___:'' 
Out[3]: 3

In [4]: ___ ='something', # _:3, __:2, ___:1

In [5]: __ # still gonna be 2
Out[5]: 2

In [6]: __ # still gonna be 2 again
Out[6]: 2

In [7]: _ # still 3
Out[7]: 3
这值得讨论,但很难修改;很难弄清楚这是什么意思,以及用户是否修改了uuu、uuuu或uuuu


在上面的示例中,将某个值替换为1,因为1是1==True,所以IPython将不会检测到您已指定了一个下划线并继续四处移动

注意,这取决于版本-它至少在IPython 5.8.0中起作用。注意,这取决于版本-它至少在IPython 5.8.0中起作用。使用其他编辑器,如IDLE或SUMBLIE,唯一的内置变量是神奇的对象,如uuuuu init_uuuuuu、uuuuu name_uuuuu和uuuu doc_u,使用其他编辑器,如IDLE或SUMBLIE,唯一的内置变量是像uuu init_uuuuuuu、uuuu name_uuuuu和uuuu doc这样的神奇对象__