python-3.x - 如何在 python3 中模拟 python2 打印语句的行为?
问题描述
有时我将一些快速代码放在一起,并有很长或括号括起来的表达式。我希望能够快速轻松地打印它们,而无需其他花哨的东西或**kwargs
. 我希望能够print
像在 python2 中那样使用关键字来进行这种用法。我怎样才能做到这一点?
解决方案
这是一个使用运算符重载的 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()
功能的地方破坏打印,但您却使用了上述关键字仿真。
推荐阅读
- gradle - 在 android studio 中使用颤振构建发布的 APK 时出错
- sql - 如何使用 sqlite 获取 CSV 值?
- javascript - 无法在 if 语句中设置状态
- javascript - 如何制作一个在完成之前重新启动圆圈动画的for循环,使其看起来像一个脉动的圆圈
- python - 如何找到 KNNClassifier() 的“特征重要性”或变量重要性图
- javascript - 没有收到来自 Express 服务器的 GET 响应
- delphi - FMX.Graphics.TCanvas.DrawEllipse 在 Android 上不起作用
- swift - 如何从 TableViewCell 中访问 ViewController 中的对象
- python - 使用 INNER JOIN 时在 BigQuery 中获取“invalidQuery”异常
- c++ - 如何迭代地获取具有重复元素的排序旋转数组中的枢轴点?