【问题标题】:iPython: print() function supresses the direct variable outputiPython:print()函数抑制直接变量输出
【发布时间】:2020-09-21 17:23:03
【问题描述】:

这一定是我刚刚错过的一些简单的事情,但我仍在努力寻找答案。 我使用 iPuthon。假设,我一次从其他来源复制了几行,比如网页。还假设片段在单独的行上有一个变量,以便将其打印出来(符合 Python 的语法):

myList = ['Abc', 25, 'Yes', 'No']
myList

结果,如我所料(事实上也是如此):

Out[5]: ['Abc', 25, 'Yes', 'No']

现在,让我们在这个片段的末尾添加一行:

myList = ['Abc', 25, 'Yes', 'No']
myList
print('voila!')

突然之间,将没有打印列表的痕迹,而只有 print('voila') 输出可见:

In [6]: myList = ['Abc', 25, 'Yes', 'No'] 
   ...: myList 
   ...: print('voila!')                                                                             
voila!

在 Jupyter 或 Komodo IDE 中发生完全相同的事情,除了我什至没有可能(嗯,一般来说)逐个输入行。我使用的解决方法是使用 print() 函数来输出对象,但这很糟糕——在大多数情况下,本机输出要先进得多。 我的理解是, print() 函数将它吐在旧输出的顶部,因此实际上替换了那里的内容,但这,无论是真是假,仍然无济于事。 我尝试使用谷歌搜索,但没有成功 - 也许,我无法很好地制定搜索字符串 - 你知道,这是一种艺术...... 请戳我的鼻子!

【问题讨论】:

  • 这不是“符合 Python 的语法”。这是一种交互式的便利。你可能特别习惯了 IPython 的版本,它除了任何默认的 Python 行为之外,还做了各种额外的事情。
  • myList 单独放在一行上并不是任何一种Python“显示这个”语法。如果是,则下一行的print 不会影响它。
  • 嗨,莫妮卡,感谢您的调查。好吧,我并不完全“习惯”任何关于 Python 的东西,因为我刚开始使用它,几天前。这种“显示它”功能可能是我可以没有的东西,但是 - 当您使用 i.g. 时,这个功能似乎非常方便。熊猫(在 Jupyter 中)。 Pandas 的“显示”输出与 print() 相比,看起来就像纽约牛排与煮肉 - 相同的卡路里和蛋白质,但味道更好。我敢打赌,所有的粗体和阴影确实有助于阅读。所以,我至少可以肯定:Pandas 开发人员确实关注这个功能。
  • 这是 IPython 将数据帧的to_html() 输出发送到可以支持丰富显示的前端。如果你想手动调用它,你可以调用IPython.display.display(your_df)。不要对任何类型的内置 Python 功能感到困惑。
  • 只需使用display 而不是print

标签: python printing output ipython


【解决方案1】:

我不确定是什么问题。在 IPython 会话中:

In [61]: x = [1,2,3] 
    ...: x 
    ...:  
    ...:                                                                        
Out[61]: [1, 2, 3]
In [62]: x = [1,2,3] 
    ...: x 
    ...: print(x)                                                               
[1, 2, 3]
In [63]: None                                                                   
In [64]:  

Out[61] 显示,并添加到输出历史记录中。它是 [61] 块的最后一行。在 [62] 中,最后一行是 print,它显示文本并返回 NoneNone 不会显示或添加到Out

一个简单的交互式 Python 会话,历史记录更加有限,只有“_”。但即使在那里,print 的输出也不会被缓存。

这是显示和缓存最后一行(或最后一条语句)的进一步证据。 [62] 中的print 确实覆盖了x

In [64]: x = [1,2,3] 
    ...: x 
    ...: 'yes'                                                                  
Out[64]: 'yes'
In [65]: _                                                                      
Out[65]: 'yes
In [66]: x = [1,2,3]; x; 'yes'                                                  
Out[66]: 'yes'

我不太确定您所说的“本机输出”是什么意思,但可能是 repr 显示。 print 的默认值是str,它可能更紧凑。以数组为例:

In [67]: x = np.array([1,2,3])                                                  
In [68]: print(x)                                                               
[1 2 3]
In [69]: x                                                                      
Out[69]: array([1, 2, 3])
In [70]: print(repr(x))                                                         
array([1, 2, 3])
In [71]: print(str(x))                                                          
[1 2 3]

我通常使用终端ipython,所以看不到更高级的显示。但我刚刚意识到,在notebook 中我可以使用

display(df)
print(df)

并获得高亮显示和纯文本。

在普通控制台中:

In [84]: display(x);print(x)                                                    
array([1, 2, 3])
[1 2 3]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-06-02
    • 2010-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-03
    相关资源
    最近更新 更多