首页 > 解决方案 > 如何在 python3 中模拟 python2 打印语句的行为?

问题描述

有时我将一些快速代码放在一起,并有很长或括号括起来的表达式。我希望能够快速轻松地打印它们,而无需其他花哨的东西或**kwargs. 我希望能够print像在 python2 中那样使用关键字来进行这种用法。我怎样才能做到这一点?

标签: python-3.xpython-2.7printing

解决方案


这是一个使用运算符重载的 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()功能的地方破坏打印,但您却使用了上述关键字仿真。


推荐阅读