【问题标题】:Display None values in IPython在 IPython 中显示无值
【发布时间】:2023-03-21 11:19:02
【问题描述】:

默认情况下,IPython 似乎不显示None 值:

In [1]: x = 1

In [2]: x
Out[2]: 1

In [3]: y = None

In [4]: y

我经常最终写y is None 以确保。如何将 IPython 配置为始终显示该值,即使它是 None

【问题讨论】:

    标签: python ipython nonetype


    【解决方案1】:

    使用print:

    >>> y = None
    >>> print y
    None
    

    【讨论】:

    • 这不是“将 IPython 配置为始终显示值”,它只是打印一次 None
    【解决方案2】:

    这是故意的,因为所有表达式都会返回一些东西,即使它只是None。在您的解释器中,您将看不到任何 None

    您可以使用repr()str() 或通过打印(默认情况下在结果上调用str())显式显示返回值:

    >>> y = None
    >>> repr(y)
    'None'
    >>> str(y)
    'None'
    >>> print repr(y)
    None
    >>> print y
    None
    

    如果表达式结果不是Noneprint repr() 将最接近解释器所做的工作。

    常规Python解释器使用sys.displayhook()显示解释器表达式结果; IPython 解释器使用it's own hook to do this,但这个钩子明确忽略了None

    您当然可以使用自己的包装器,以下钩子委托给预先存在的钩子并始终显示None,无论如何:

    import sys
    
    _chained_hook = sys.displayhook
    def my_displayhook(res):
        _chained_hook(res)
        if res is None:
            sys.stdout.write('None\n')
    
    sys.displayhook = my_displayhook
    

    【讨论】:

    • 我很乐意将作业显示为None(显式与隐式以及所有爵士乐)。是否有可能让 IPython 这样做?
    • 我发现 IPython API 文档相当密集且无用; sys.displayhook() 函数通常被调用,这是 IPython 与 display trap 挂钩的功能,大概提供了改变行为的挂钩。
    • 请注意,赋值不是表达式,它们是语句,因此它们不会显示任何内容,因为没有返回值。
    • 显示陷阱的链接现已断开。
    • @Bach:谢谢,通过链接到我当时提到的版本的新位置进行了更正。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-06-20
    • 1970-01-01
    • 1970-01-01
    • 2012-06-14
    • 2016-01-10
    • 2013-03-20
    • 2016-06-06
    相关资源
    最近更新 更多