【问题标题】:How can I emulate the behavior of the python2 print statement in python3?如何在 python3 中模拟 python2 打印语句的行为?
【发布时间】:2018-11-16 06:16:08
【问题描述】:

有时我会整理一些快速代码并使用长或括号括起来的表达式。我希望能够在没有其他花哨的东西或**kwargs 的情况下快速轻松地打印它们。我希望能够像在 python2 中那样使用print 关键字来实现这种用法。我该怎么做?

【问题讨论】:

    标签: python-3.x python-2.7 printing


    【解决方案1】:

    这是一个使用运算符重载的 hack,您至少可以在某种程度上模拟 print 关键字。

    如果您要编写一个类并重载它的任何operator(a,b) 方法,那么从数学上讲,您将能够在方法主体中编写任何您想要的内容并将一些值作为 RHS 传递给运算符。例如,这是一个类:

    class printkw:
        def __lshift__(self, value=None):
            print(value)
            return value
    

    如果你做类似的事情

    printk = printkw()
    printk << "hello world"
    

    然后它会产生输出

    hello world
    

    如果你想完全匿名对待它,你可以侥幸逃脱

    printkw() << "hello world"
    

    虽然现在看起来更不美观了。

    你选择重载的操作符可以是任何东西;然而,即使是= 赋值运算符,我个人更喜欢 lshift 运算符,因为它使它看起来类似于 C++。此外,赋值运算符没有语义意义:你没有分配你想要输出的东西。不过,这完全取决于您的喜好。

    当然,这就是我之前所说的,一个hack,而且可能会不受欢迎。当然,我不会经常使用这种 hack(老实说,到目前为止只使用了大约两次),也不推荐它。然而,有时你只有很长的语句,或者有时你想调试和编写一些快速而肮脏的东西,并且必须正确地为表达式加上括号可能很乏味,这就是我使用这个 hack 的时候。对于常规使用,请避免使用它,因为它可能会在其他人认为它是标准 print() 函数但您已使用上述关键字仿真的地方中断打印。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-01-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-02
      • 2013-07-26
      • 2018-03-15
      相关资源
      最近更新 更多